`

关于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"  。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics