2016-10-25 7 views
0

私は休止状態で春のプロジェクトを持っています。私はこの方法でオブジェクトを削除しようとすると:Hibernate 4.3.6 + spring - 再帰的削除メソッド

 User ent = userDaoImpl.load(User.class, 1); 
    userDaoImpl.delete(ent); 

結果は以下の通りです:

 root cause 
    java.lang.StackOverflowError 
com.maxim.spring.dao.UserDaoImpl.delete(UserDaoImpl.java:50) 
com.maxim.spring.dao.UserDaoImpl.delete(UserDaoImpl.java:50) 
com.maxim.spring.dao.UserDaoImpl.delete(UserDaoImpl.java:50) 
com.maxim.spring.dao.UserDaoImpl.delete(UserDaoImpl.java:50) 
com.maxim.spring.dao.UserDaoImpl.delete(UserDaoImpl.java:50) 
com.maxim.spring.dao.UserDaoImpl.delete(UserDaoImpl.java:50) 
com.maxim.spring.dao.UserDaoImpl.delete(UserDaoImpl.java:50) 
com.maxim.spring.dao.UserDaoImpl.delete(UserDaoImpl.java:50) 
com.maxim.spring.dao.UserDaoImpl.delete(UserDaoImpl.java:50) 
com.maxim.spring.dao.UserDaoImpl.delete(UserDaoImpl.java:50) 
com.maxim.spring.dao.UserDaoImpl.delete(UserDaoImpl.java:50) 
com.maxim.spring.dao.UserDaoImpl.delete(UserDaoImpl.java:50) 
com.maxim.spring.dao.UserDaoImpl.delete(UserDaoImpl.java:50) 
... 

私は、オブジェクトが永続コンテキストでなければならないことを読んで、それをloadメソッドによってロードされます。

@Override 
public void delete(User user) { 
    delete(user); 

} 


@Override 
public User load(Class cl, int id){ 
    return (User) getSession().getCurrentSession().load(cl, id); 
} 

と実装すぎAbstractDaoを拡張:インタフェースの実装は次のように動作します質問、事前に 。

AbstractDao方法:適切な方法でそれを作るためにどのように

public void delete(Object entity) { 
    getSession().getCurrentSession().delete(entity); 
} 

?あなたは、スタック上のメモリを持つまで

答えて

1

方法

@Override 
public void delete(User user) { 
    delete(user); 

} 

は、自身を呼び出し続けます。 あなたは

@Override 
public void delete(User user) { 
    getSession().getCurrentSession().delete(user); 
} 

それとも、それを削除し、AbstractDaoからdeleteメソッドを使用するように変更する必要があります。

0

抽象クラスのメソッドがジョブを実行する場合、それをオーバーライドしないでください。

また、あなたは可能性があり

@Override 
public void delete(User user) { 
    super.delete(user); 
} 

しかし、それは不要です。

関連する問題