auto-import是什么意思呢?
我们经常会写这样一个HQL语句:
from User u where u.name='罗灿锋';
绝大多数时候,这样写是不会发生问题的。
hibernate在处理这个HQL时,会先将其翻译成一条数据库能够识别的sql语句。翻译的依据当然是实体与数据库表之间的映射关系了。
现在我们就给他制造一些问题,我们让hibernate同时管理两个相同名称的实体:org.mysoa.security.model.User和com.kedacom.ksoa.security.model.User。
这时,我们再将上面那条HQL给hibernate解析,他还能顺利地将其翻译成一条sql语句吗?答案当然是否定的,他不知道你要查 org.mysoa.security.model.User还是com.kedacom.ksoa.security.model.User。
所以,一条正确的HQL应该是这样的:
from org.mysoa.security.model.User u where u.name='罗灿锋';
但是,大多数时候,一个系统里不会出现同名的实体,如果要求所有HQL都这么写就不好了。所以hibernate提供一个auto-import属性,当你不指定具体的实体时(只指定from User),他会自动找到唯一的名为User的实体映射,将其补全为org.mysoa.security.model.User。
当你的系统中确实要需要两个同名的实体时
当你的系统中确实要需要两个同名的实体时,我们需要做两件事:
将这两个同名的实体的映射文件都要设置为auto-import="false"
所有关于这两个实体的HQL,都需要明确指定其全限定名(如org.mysoa.security.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"设置每天映射文件
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/thinkner/archive/2010/02/02/5280642.aspx
分享到:
相关推荐
hibernate-mapping参数详解.docx
hibernate-commons-annotations-4.0.1.Final.jar hibernate-core-4.1.12.Final.jar hibernate-ehcache-4.1.12.Final.jar hibernate-entitymanager-4.1.12.Final.jar hibernate-jpa-2.0-api-1.0.1.Final.jar ...
赠送jar包:hibernate-jpa-2.1-api-1.0.2.Final.jar; 赠送原API文档:hibernate-jpa-2.1-api-1.0.2.Final-javadoc.jar; 赠送源代码:hibernate-jpa-2.1-api-1.0.2.Final-sources.jar; 赠送Maven依赖信息文件:...
HibernateTools-3.2.4,Hibernate工具包,开发使用,欢迎下载
赠送jar包:hibernate-jpa-2.1-api-1.0.2.Final.jar; 赠送原API文档:hibernate-jpa-2.1-api-1.0.2.Final-javadoc.jar; 赠送源代码:hibernate-jpa-2.1-api-1.0.2.Final-sources.jar; 赠送Maven依赖信息文件:...
hibernate--5.Hibernate配置文件详解
HibernateTools-3.2.4.Beta1-R200810311334.zip
hibernate--5.Hibernate配置文件详解
hibernatetools-Update-4.1.1.zip
hibernate-jpa-2.1-api-1.0.0.final-sources.jar 源码 hibernate-jpa-2.1-api-1.0.0.final-sources.jar 源码
Eclipse中Hibernate插件。
很多人为了配置jpa找这个动态产生字节码的jar文件,hibernate-distribution-3.3.1.GA包太大,而hibernate-distribution-3.3.2.GA的jar没有这个jar文件,希望对大家有用
Eclipse用于Hibernate框架开发插件,全CSDN最低资源分下载,让你吃上真正的石灰。。。
hibernate-annotations-3.4.0.GA hibernate-annotations-3.4.0.GA hibernate-annotations-3.4.0.GA
hibernate-jpa-2.0-api-1.0.1.Final.jar
hibernate-release-4.3.10.Final.zip 官方原版,因上传文件大小限制,去掉里面的project
使用hibernate-validator 进行校验的jar包,里面包括了基础hibernate-validator-5.0.0.CR2.jar hibernate-validator-annotation-processor-5.0.0.CR2.jar 之外,还包括了el-api-2.2.jar javax.el-2.2.4等项目必不可...
hibernate-jpa-2.1-api-1.0.0.final.jar.zip,内含hibernate-jpa-2.1-api-1.0.0.final.jar
hibernate-commons-annotations-5.0.1.Final.jar的源码