论坛首页 Java企业应用论坛

Hibernate throws: Flush during cascade is dangerous 問題

浏览 9521 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2003-09-16  
我在 delete 一個 資料時 ...
出現這個 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
請教各位了 ~~~
   发表时间:2003-09-16  
easy ....
在 hibernate.org forum 找到的

http://forum.hibernate.org/viewtopic.php?t=460&highlight=flush+during+cascade+dangerous

提供給大家 ~~
0 请登录后投票
   发表时间: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);是必需的,否则就可能报那个错误。
0 请登录后投票
   发表时间: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);; 


望您能見諒 ... ^^
0 请登录后投票
   发表时间:2003-09-16  
引用

parent.getChildren().remove(child);
session.save(parent);
session.delete(child);

一样的,但session.save(parent); 不是必需的,直接Transaction.commit()就行了。
0 请登录后投票
   发表时间: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();;
            }

            ;
        }
    }
0 请登录后投票
   发表时间:2003-12-31  
引用

我怎麼試都無法成功的刪除child

什么错误?贴出程序。
0 请登录后投票
   发表时间:2003-12-31  
确认parent.getChilds().remove(child);返回true吗?

最好别用复合主键。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics