浏览 9521 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2003-09-16
出現這個 error message 其中去 hibernate.org 找到相關資料 Hibernate throws: Flush during cascade is dangerous. This almost always happens because you forgot to remove a deleted instance from an association with cascading save enabled. You should remove deleted objects from associations before flushing the session. 我想 key point 應該是 You should remove deleted objects from associations before flushing the session 不過我不懂 remove deleted objects from associations 請教各位了 ~~~ 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2003-09-16
easy ....
在 hibernate.org forum 找到的 http://forum.hibernate.org/viewtopic.php?t=460&highlight=flush+during+cascade+dangerous 提供給大家 ~~ |
|
返回顶楼 | |
发表时间:2003-09-16
引用 You should remove deleted objects from associations before flushing the session Org(one) ==== (many)User public static void .....{ Session session=.... Transation tx=null; try{ tx=session.beginTransaction();; Org org=(Org);session.load(..... User user=(User);org.getUsers();.iterator();.next();; org.getUsers();.remove(user);; session.delete(user);; tx.commit();; }catch(Exception e);{ if(tx!=null); tx.rollback();; throw e; } } org.getUsers().remove(user);是必需的,否则就可能报那个错误。 |
|
返回顶楼 | |
发表时间:2003-09-16
yehs220 写道 引用 You should remove deleted objects from associations before flushing the session Org(one) ==== (many)User public static void .....{ Session session=.... Transation tx=null; try{ tx=session.beginTransaction();; Org org=(Org);session.load(..... User user=(User);org.getUsers();.iterator();.next();; org.getUsers();.remove(user);; session.delete(user);; tx.commit();; }catch(Exception e);{ if(tx!=null); tx.rollback();; throw e; } } org.getUsers().remove(user);是必需的,否则就可能报那个错误。 yehs220 兄 ... sorry .. 我看不太懂你的例子 不過我覺得下面蠻好懂的 parent.getChildren();.remove(child);; session.save(parent);; session.delete(child);; 望您能見諒 ... ^^ |
|
返回顶楼 | |
发表时间:2003-09-16
引用 parent.getChildren().remove(child); session.save(parent); session.delete(child); 一样的,但session.save(parent); 不是必需的,直接Transaction.commit()就行了。 |
|
返回顶楼 | |
发表时间:2003-09-16
yehs220 写道 引用 parent.getChildren().remove(child); session.save(parent); session.delete(child); 一样的,但session.save(parent); 不是必需的,直接Transaction.commit()就行了。 的確 ... 我後來發現 加上 session.save(parent) ... 能夠執行 .. 不會有 error .. 但是資料根本沒有刪除 ..... 但是把 session.save mark 掉 .. 就 ok 了 ... user.getSubscriptions();.remove(subscription);; //sess.save(user);; subscriptionDAO.removeSubscription(sess, subscription);; 才能夠順利執行 .... removeSubscription public void removeSubscription(Session ses, Subscription subscription); throws DAOException { removeObject(ses, Subscription.class, subscription.getId();, subscription);; } removeSubscription protected void removeObject(Session ses, Class clazz, String id, Object obj); throws DAOException { try { // Object must originate in this session obj = ses.load(clazz, id);; ses.delete(obj);; ses.flush();; ses.connection();.commit();; } catch (Exception e); { try { ses.connection();.rollback();; } catch (Exception ex); { log.error("removeObject Error !!");; e.printStackTrace();; } ; throw new DAOException(e);; } finally { try { HibernateSession.closeSession();; } catch (Exception ex); { log.error("HibernateSession.closeSession Error !!");; ex.printStackTrace();; } ; } } |
|
返回顶楼 | |
发表时间:2003-12-31
引用 我怎麼試都無法成功的刪除child 什么错误?贴出程序。 |
|
返回顶楼 | |
发表时间:2003-12-31
确认parent.getChilds().remove(child);返回true吗?
最好别用复合主键。 |
|
返回顶楼 | |