java - Hibernate 4.3.6 + spring - 递归删除方法

标签 java spring hibernate

我有一个带有 hibernate 的 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 方法加载的。 在回答问题之前,接口(interface)实现按以下方式工作:

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

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

关于java - Hibernate 4.3.6 + spring - 递归删除方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40246417/

相关文章:

java - spring-mvc 应用程序出现 tomcat 404 错误

hibernate - 复合键另存为null

java - 使用 Kruskal 算法计算最小生成树时的错误答案

java - 创建 HashMap 和 TreeMap 对象的不同语法

java - 使用 mediametadataretriever 显示专辑封面

spring - 难以使用测试代码验证事务内的 hibernate 更新查询

java - JPA 获取连接实体返回递归获取循环

java - 使用 JUnit 在 Intellij 上运行特定测试

java - Spring aop 资源

spring - 如何从 REST spring 应用程序的 SqlExceptionHelper 获取有关错误的信息