在hibernate的实体映射文件(.hbm.xml)里,hibernate-mapping中有一个auto-import属性,默认值为true。
auto-import是什么意思呢? 我们经常会写这样一个HQL语句: from User u where u.name='aa'; 绝大多数时候,这样写是不会发生问题的。 hibernate在处理这个HQL时,会先将其翻译成一条数据库能够识别的sql语句。翻译的依据当然是实体与数据库表之间的映射关系了。 现在我们就给他制造一些问题,我们让hibernate同时管理两个相同名称的实体:com.lft.model.User和com.lft.feng.model.User。 这时,我们再将上面那条HQL给hibernate解析,他还能顺利地将其翻译成一条sql语句吗?答案当然是否定的,他不知道你要查com.lft.model.User还是com.lft.feng.model.User。 所以,一条正确的HQL应该是这样的: from com.lft.model.User u where u.name='aa'; 但是,大多数时候,一个系统里不会出现同名的实体,如果要求所有HQL都这么写就不好了。所以hibernate提供一个auto-import属 性,当你不指定具体的实体时(只指定from User),他会自动找到唯一的名为User的实体映射,将其补全为com.lft.model.User。 |
当你的系统中确实要需要两个同名的实体时 当你的系统中确实要需要两个同名的实体时,我们需要做两件事:
有人要问了,只要你做了第二条就够了呀,只要你保证所有的HQL都写了全限定名,那么hibernate解析就不会出错,系统应该是可以运行的。 其实不然。hibernate怎么知道你所有的HQL都写了全限定名?事实上,hibernate在系统加载过程中,如果发现有两个同名的实体,但 是有任何一个没有设置auto-import=false,他就会抛出异常并停止加载,他以这种方式来确保你的auto-import问题在系统加载时就 暴露出来,而不是延迟到真正执行一个有问题的HQL时才抛出问题。
当没有进行auto-import="false"设置时就会报出org.hibernate.DuplicateMappingException异常信息 这个异常是Hibernate在映射的时候抛出的,解决这个异常的方法有两种: 1. 直接的方法,就是把自己的类名字改一个名字。 2. 应用auto-import="false"设置每个映射文件
第二种解决方法的原理是:
在使用Hibernate的HQL查询语句的时候,如"select user from User user" from后面的类名默认是自动引入的也就是<hibernate-mapping auto-import="true"> 的效果,所以改为false后就要写类的全名。
|
相关推荐
### Hibernate Mapping 参数详解 在 Hibernate 中,为了将 Java 对象映射到数据库表,并实现对象关系映射(ORM),开发者需要定义一系列配置属性来指导 Hibernate 如何进行转换。本文将详细解析 `hibernate-mapping...
同样地,需要在项目的`/WEB-INF/lib`目录下添加Hibernate相关的jar包,并在Spring的核心配置文件中配置Hibernate的相关属性。 ##### 5. 添加Struts 1.2支持 Struts是一个基于MVC模式的框架,用于实现视图层的展示...
<prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> <property name="annotatedClasses"> <list> <value>com.example.model.User</value> </list> </property> </bean> </beans> ``` ...
<servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> ... <listener> <listener-class>org.springframework.web.context....
### Jersey+Spring+Hibernate配置详解 #### 一、编写目的 本文档旨在详细介绍如何通过Spring、Hibernate和Jersey这三个框架来构建一个RESTful Web服务。文章不仅覆盖了基础的环境配置,还包括了如何搭建框架、配置...
<import resource="register.xml"/> <bean id="propertyConfiguer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="WEB-INF/db....
<prop key="hibernate.hbm2ddl.auto">update</prop> </props> </property> </bean> </beans> ``` #### 三、Jar包导入 在SSH整合的过程中,正确的导入Jar包至关重要。以下是一些常用的Jar包列表: - **Struts2...
<exception-mapping exception="java.lang.Exception" result="error"/> </global-exception-mappings> <action name="Login" class="action.LoginAction"> <result>/loginResult.jsp</result> <result name=...
**Hibernate配置步骤详解** 在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本教程将详细讲解Hibernate的配置步骤,帮助开发者快速上手。 1. **环境准备** 在开始配置...
</servlet-mapping> ``` 2. **定义 Controller**:在 `src/main/java` 目录下创建 Controller 类,处理 HTTP 请求。例如,一个简单的 "Hello, World!" 控制器可能如下所示: ```java import org.springframework....
</hibernate-mapping> ``` 映射文件中,`<class>`标签指定了实体类名和对应的数据库表,`<id>`和`<property>`标签分别对应主键和普通字段。 ### 3. SessionFactory与Session 在应用启动时,我们需要通过`...
<property name="hibernate.hbm2ddl.auto">update</property> <!-- 是否显示SQL语句 --> <property name="hibernate.show_sql">true</property> <!-- SQL格式化 --> <property name="hibernate.format_sql">...
private static final ThreadLocal<Session> threadLocal = new ThreadLocal<>(); private static Configuration configuration = new Configuration(); private static org.hibernate.SessionFactory ...
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> </bean> <!-- Struts2 Action Bean --> <bean id="userAction" ...
### 知识点详解:简单Hibernate示例解析 #### 一、概述 本文将通过一个简单的Hibernate示例来深入理解Hibernate的基本用法及其在实际项目中的应用。此示例来源于`coreservlets.com`提供的教程材料,具体详情可访问...
Tomcat服务器可以通过修改`server.xml`文件来调整处理HTTP请求的字符集,具体做法是在`<Connector>`标签中加入`URIEncoding`属性: ```xml <Connector debug="0" acceptCount="100" connectionTimeout="20000" ...