Hibernate deleteEntity问题

时间:2014-12-05 11:01:46

标签: java hibernate jpa orm persistence

有两个域对象(让我们称之为A和B),它们使用Hibernate进行删除/删除。

我只能删除A但不能删除B对象,并且没有例外,也没有记录任何错误的日志记录。 两种对象类型都使用相同的服务方法进行删除。

public void delete(T instance) {
    getEntityManager().remove(instance);
}

我已经钻到B停止的地方,A能够进一步成功删除。 并且B在课程EntityDeleteAction中停止;意味着@Override public void execute() throws HibernateException中的方法EntityDeleteAction永远不会被调用。

我无法找到执行方法的用法,并且我已经比较了各个阶段的状态,并且无法找到任何异常(可能存在)。

任何人都有Hibernate / EntityDeleteAction的经验,可以让我知道问题是什么吗?

更新

我找到了为什么B不会被删除的原因。这是因为A引用了B的集合。 而这个集合急切地加载而不是懒惰。这段代码说明了这一点:

@OneToMany(fetch = FetchType.EAGER, mappedBy = "a", targetEntity = B.class, cascade = CascadeType.ALL)
private Set<B> bCollection = new HashSet<B>();

删除可以更改为FetchType.LAZY。但是在这个应用程序中,我们不打开hibernate / jpa会话,所以如果在会话关闭后尝试继续懒惰地继续加载,延迟加载将无法在应用程序的其他部分中运行。 所以我们找到原因但不是解决方案,因为我们希望保持急切的加载。

是否可以在删除之前将B与A分离?它是导致问题的从A到B的有效参考。

2 个答案:

答案 0 :(得分:0)

在删除调用后尝试刷新并启用Hibernate SQL日志记录。

答案 1 :(得分:0)

解决方案只是从A中的集合中删除B,然后从数据库中删除,从而从A中删除对B的引用,这就是问题。

collectionOfBObjects.remove(b);