在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-mapping> <class name="com.bjsxt.hibernate.User" table="t_user"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <!-- <many-to-one name="group" column...
struts.properties设置( struts.objectFactory = spring struts.i18n.reload=true ...struts.i18n.encoding=GBK ) web.xml(仅写出中文处理部分,spring的配置不用改变) <filter> ... </filter-mapping>
<property name="数据库中表的其它字段所对应的持久化对象中的属性名" column="对应数据库中表的其它字段名" type="java.lang.String(数据库中其它字段的数据类型)"/> </class> </hibernate-mapping> 三.配置...
<filter-mapping> <filter-name>struts2</filter-name> <url-pattern>*.action</url-pattern> <url-pattern>*.jsp</url-pattern> </filter-mapping> 2、添加hibernate功能 3、添加Spring功能
web.xml添加filter: <filter> <filter-name>SingleFilter</filter-name> <filter-class>org.com.filter.SingleFilter</filter-class> </filter> <filter-mapping> <filter-name>... </filter-mapping>
<servlet> <servlet-name>HelloWorldname</servlet-name> <!-- 此说明该<servlet/> 已经得到了注册名HelloWorldname, ... 它与<servlet-mapping/>必须注册同样的注册名 --> ...</servlet-mapping>
<param-name>resteasy.servlet.mapping.prefix</param-name> <param-value>/app/service</param-value> </context-param> <!--接口管理--> <context-param> <param-name>resteasy.resources</param-name> ...
<filter-mapping> <filter-name>shiroFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> maven 的pom.xml 配置 <!-- shiro简单配置 --> <dependency> <groupId>org.apache....
</filter-mapping> <!-- Spring view分发器 --> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> ...
</filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app> 4 cas client 2.0配置说明 <?xml version="1.0" encoding="UTF-8"?> <web-app version=...
重点位置: <!-- spring 配置文件--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/app.xml,classpath:org/codehaus/xfire/spring/... </servlet-mapping>
(写在前面的话,评论中说的图片显示问题解决了,原因是文件被拦截了,感谢帮忙解决问题的同学!) 基于SSM(spring+springMVC+MyBatis)技术开发的仓库管理系统,是我这学期期末综合课设项目,新鲜...</servlet-mapping>
<servlet-mapping> <servlet-name>③HelloWorld</servlet-name> <url-pattern>④/ helloworld</url-pattern> 这里的”/ ”必须带!!!! </servlet-mapping> <welcome-file-list> <welcome-file>...
(写在前面的话,评论中说的图片显示问题解决了,原因是文件被拦截了,感谢帮忙解决问题的同学!) 基于SSM(spring+springMVC+MyBatis)技术开发的仓库管理系统,是我这学期期末综合课设项目,新鲜... </servlet-mapping>
<filter-mapping> <filter-name>AjaxAnywhere</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping> <filter-mapping> <filter-name>AjaxAnywhere</filter-name> <url-pattern>*.do</url-pattern> <...
简单易用的gzip包,工程中引入tk-filters.jar,然后在web.xml做如下配置,即可使用。 <!-- GZIPFilter Definition --> <filter> <filter-name>GZIPFilter</filter-name> ... </filter-mapping>
用于 web.xml 配置详解。例如: <web-app> <display-name></display-name>定义了...<filter-mapping></filter-mapping> 一旦命名了一个过滤器,就要利用filter-mapping元素把它与一个或多个servlet或JSP页面相关联。
1、 导入dwr.jar包 2、 在web.xml中配置dwr,如下: <!-- 配置DWR --> <servlet> <servlet-name>dwr-... <servlet-mapping> <servlet-name>dwr-invoker</servlet-name> <url-pattern>/dwr/*</url-pattern>