隨筆 - 117  文章 - 72  trackbacks - 0

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

          常用鏈接

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

          訂閱

          訂閱

          留言簿(7)

          隨筆分類(130)

          隨筆檔案(123)

          搜索

          •  

          積分與排名

          • 積分 - 156166
          • 排名 - 390

          最新評論

          [標題]:[原]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 天堂露珠 閱讀(1119) 評論(1)  編輯  收藏 所屬分類: ErrorHibernate

          FeedBack:
          # re: [原]Hibernate - TransientObjectException 2009-09-25 11:02 阮若愁
          我都看了N篇關于這個錯的文章了 就你的最好最直接最有效 厲害 佩服  回復  更多評論
            
          主站蜘蛛池模板: 青浦区| 琼结县| 云安县| 阿拉善右旗| 株洲县| 延边| 勐海县| 元氏县| 深泽县| 南城县| 彭阳县| 高阳县| 磐石市| 宣化县| 克山县| 兰西县| 武山县| 应城市| 阳西县| 广昌县| 乐清市| 高安市| 滦平县| 合川市| 甘孜县| 岱山县| 北川| 四会市| 阿拉善左旗| 新和县| 麻江县| 长兴县| 怀化市| 融水| 鄱阳县| 嘉祥县| 阿坝县| 宜良县| 黔东| 麦盖提县| 浑源县|