JPA使用中级联删除,出现了异常

secondfirstlife 2012-12-20 05:52:11
严重: Servlet.service() for servlet default threw exception
org.hibernate.ObjectDeletedException: deleted entity passed to persist: [net.aykj.pojo.Expert#<null>]
at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:113)
at org.hibernate.impl.SessionImpl.firePersistOnFlush(SessionImpl.java:672)
at org.hibernate.impl.SessionImpl.persistOnFlush(SessionImpl.java:664)
at org.hibernate.engine.CascadingAction$9.cascade(CascadingAction.java:346)
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:292)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:240)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:193)
at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:320)
at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:266)
at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:243)
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:193)
at org.hibernate.engine.Cascade.cascade(Cascade.java:154)
at org.hibernate.event.def.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:154)
at org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:145)
at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:88)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:49)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1028)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:366)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:54)
...全文
241 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
笑莫问 2012-12-22
  • 打赏
  • 举报
回复
http://blog.sina.com.cn/s/blog_a2de16f4010150ns.html 参考下吧,1楼的估计是copy这的
secondfirstlife 2012-12-22
  • 打赏
  • 举报
回复
这个我也知道啊,我配置一对多关系里边全是ALL的, 不应该啊
secondfirstlife 2012-12-22
  • 打赏
  • 举报
回复
Expert article = expertDAO.queryById(id); if(article != null) { String picture = article.getPicture(); String videoPath = article.getVideoPath(); Set<ExpertMessage> expertMessages=article.getExpertMessages(); Set<WorkTime> workTimes=article.getWorkTimes(); Set<OnlineBook> onlineBooks=article.getOnlineBooks(); Set<ExpertPicture> expertPictures=article.getPictures(); for(ExpertMessage e:expertMessages){ //article.getExpertMessages().remove(e); e.getExpert().getExpertMessages().remove(e); expertMessageDAO.remove(ExpertMessage.class, e.getId()); } for(OnlineBook e:onlineBooks){ //article.getOnlineBooks().remove(e); e.getExpert().getOnlineBooks().remove(e); onlineBookDAO.remove(OnlineBook.class, e.getId()); } for(ExpertPicture e:expertPictures){ e.getExpert().getPictures().remove(e); expertPictureDAO.remove(ExpertPicture.class, e.getId()); //article.getPictures().remove(e); } for(WorkTime e:workTimes){ e.getExpert().getWorkTimes().remove(e); workTimeDAO.remove(WorkTime.class, e.getId()); //article.getWorkTimes().remove(e); } expertDAO.remove(article); if(picture != null) { FileUtil.deleteFile(getFileBasePath() + picture); } if(videoPath != null) { FileUtil.deleteFile(getFileBasePath() + videoPath); } } 各种删不掉,试各种方法啊
secondfirstlife 2012-12-22
  • 打赏
  • 举报
回复
帖子我看了好多了,就是搞不定我的这个,我里边关系有些多,一个表关联了好多的SET
fengyingkong 2012-12-21
  • 打赏
  • 举报
回复
在更新一对多关系对象中的一的一方,如果涉及到多的一方,特别是要删除多的一方的某些对象, 则必须要先从集合中剔除,然后断开关系,最后删除

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧