我有冬眠的春季项目。当我尝试以这种方式删除对象时:

     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);
}


如何以正确的方式制作?

最佳答案

方法

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

}


会一直调用自己,直到堆栈上有一个内存为止。
您应该将其更改为

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


或者只是将其删除并使用delete中的AbstractDao方法。

07-28 03:29
查看更多