关于Hibernate中列的重复映射

Project是一个基础类,begin是一个java.sql.Date类型的属性,Project.hbm.xml如下:
<?xml version= "1.0 "?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN " "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd ">
<hibernate-mapping package= "com.hbucc.research.objects ">
<class name= "Project " table= "project " lazy= "false ">
<id name= "projectid " column= "projectid " type= "long ">
<generator class= "increment "/>
</id>
<property name= "projectname " column= "projectname " type= "string " not-null= "true "/>
<property name= "begin " column= "begin " type= "date "/>
<property name= "end " column= "begin " type= "date "/>
<property name= "amount " column= "amount " type= "int " not-null= "true "/>
<property name= "validate " column= "validate " type= "boolean " not-null= "true "/>
<many-to-one name= "teacher " column= "teacherid " class= "com.hbucc.research.objects.Teacher " not-null= "true "/>
<many-to-one name= "tasksource " column= "tasksourceid " class= "com.hbucc.research.objects.TaskSource " not-null= "true "/>
<many-to-one name= "institute " column= "instituteid " class= "com.hbucc.research.objects.Institute " not-null= "true "/>
</class>
</hibernate-mapping>
运行时确总让加上insert= "false " update= "false ",出错如下:

org.hibernate.MappingException: Repeated column in mapping for entity: com.hbucc.research.objects.Project column: begin (should be mapped with insert= "false " update= "false ")
at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:575)
at org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:597)
at org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:615)
at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:405)
at org.hibernate.mapping.RootClass.validate(RootClass.java:192)
at org.hibernate.cfg.Configuration.validate(Configuration.java:984)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1169)
at com.hbucc.research.businesslogic.BusinessLogic. <clinit> (BusinessLogic.java:33)
at com.hbucc.research.struts.loginAction.execute(loginAction.java:22)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:226)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1164)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:415)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
只所以报错是由于上面映射文件中的end、begin同事映射到begin列中。在hibernate中实体类中可以有多个属性映射到表中的,但是只能有一个属性能够影响数据库中该列的值。可以把其他列设置为只读的,即update="false" insert="false" 。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值