隨筆 - 117  文章 - 72  trackbacks - 0

          聲明:原創作品(標有[原]字樣)轉載時請注明出處,謝謝。

          常用鏈接

          常用設置
          常用軟件
          常用命令
           

          訂閱

          訂閱

          留言簿(7)

          隨筆分類(130)

          隨筆檔案(123)

          搜索

          •  

          積分與排名

          • 積分 - 155956
          • 排名 - 389

          最新評論

          [標題]:[原]Hibernate - TransientObjectException
          [時間]:2009-6-19
          [摘要]:object references an unsaved transient instance
          [關鍵字]:Hibernate,
          [環境]:Hibernate3.2,MyEclipse7.0,MySQL5.1
          [作者]:Winty (wintys@gmail.com) http://www.aygfsteel.com/wintys

          [錯誤]:
          ERROR AbstractFlushingEventListener:301 - Could not synchronize database state with session
          org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: wintys.hibernate.manytomany.Course
              at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:219)
              at org.hibernate.type.EntityType.getIdentifier(EntityType.java:397)
              at org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:78)
              at org.hibernate.persister.collection.AbstractCollectionPersister.writeElement(AbstractCollectionPersister.java:755)
              at org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:1143)
              at org.hibernate.action.CollectionRecreateAction.execute(CollectionRecreateAction.java:26)
              at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
              at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:234)
              at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:145)
              at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
              at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
              at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
              at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
              at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
              at wintys.hibernate.manytomany.StudentDAOBean.insert(StudentDAOBean.java:49)
              at org.apache.jsp.index_jsp._jspService(index_jsp.java:68)
              at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
              at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
              at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
              at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
              at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
              at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
              at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
              at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
              at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
              at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
              at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
              at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
              at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
              at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
              at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
              at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
              at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
              at java.lang.Thread.run(Unknown Source)
          object references an unsaved transient instance - save the transient instance before flushing: wintys.hibernate.manytomany.Course

          [原因]:
              使用session.save時,相關的級聯對象沒有被保存。

          [解決]:
          Either use session.save for both objects or specify a cascade="save-update,persist" in your mapping.
          即:
          1、加上cascade="all"
          <set name="courses" table="student_course" cascade="all">
          ...
          </set>
          程序中直接使用。
          session.save(student);

          2、修改程序,使相關的級聯對象先保存。
          session.save(course);//加上這一句
          session.save(student);//student中關聯了course

          [參考資料]:
          object references an unsaved transient instance - save the transient instance before flushing : http://blog.csdn.net/riseman/archive/2008/03/03/2143661.aspx

          原創作品,轉載請注明出處。
          作者:Winty (wintys@gmail.com)
          博客:http://www.aygfsteel.com/wintys

          posted on 2009-06-19 22:59 天堂露珠 閱讀(1117) 評論(1)  編輯  收藏 所屬分類: Error 、Hibernate

          FeedBack:
          # re: [原]Hibernate - TransientObjectException 2009-09-25 11:02 阮若愁
          我都看了N篇關于這個錯的文章了 就你的最好最直接最有效 厲害 佩服  回復  更多評論
            
          主站蜘蛛池模板: 炉霍县| 太原市| 阳高县| 浮山县| 龙岩市| 石景山区| 凭祥市| 上虞市| 新乡县| 平阳县| 涞水县| 尼玛县| 平安县| 靖宇县| 会宁县| 泸州市| 缙云县| 南木林县| 平和县| 普安县| 青海省| 平顶山市| 丽江市| 酉阳| 鞍山市| 漠河县| 鱼台县| 哈巴河县| 施秉县| 苗栗县| 托里县| 东城区| 敦煌市| 米泉市| 古浪县| 斗六市| 茶陵县| 咸阳市| 松滋市| 长治县| 昭通市|