读书人

Hibernate的lt;hibernate-地图pinggt;中au

发布时间: 2013-01-23 10:44:49 作者: rapoo

Hibernate的<hibernate-mapping>中auto-import属性详解

在hibernate的实体映射文件(.hbm.xml)里,hibernate-mapping中有一个auto-import属性,默认值为true。

Hibernate的<hibernate-地图ping>中auto-import属性详解auto-import是什么意思呢?

我们经常会写这样一个HQL语句:

Hibernate的<hibernate-地图ping>中auto-import属性详解当你的系统中确实要需要两个同名的实体时

当你的系统中确实要需要两个同名的实体时,我们需要做两件事:

    将这两个同名的实体的映射文件都要设置为auto-import=false所有关于这两个实体的HQL,都需要明确指定其全限定名(如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后就要写类的全名。


?

读书人网 >编程

热点推荐