通过本机SQL删除的子权限仍然存在于entityManager中

时间:2012-05-26 22:07:55

标签: java sql hibernate

我在Java(hibernate 3.1)中有这样的代码:

EntityManager manager = ...;
Entity parent = manager.find(...);
removeChildrenSQL(parent, manager); // here DELETE FROM ... is executed
manager.flush();

我需要移除的实体不再从hibernate中看到。

我试过了(这些没用):

1)manager.refresh(parent);

2)手动刷新已删除的实体

3)与所有孩子一起重新加载父母。

我该怎么做?

2 个答案:

答案 0 :(得分:0)

尝试

manager.detach(parent);
parent = manager.find(Entity.class, parent.getId());

(您可能还需要分离子项,尤其是在删除子项之前修改它们)

答案 1 :(得分:0)

为所有孩子调用session.evict(childEntity),其中session是你的休眠会话。

要使用hibernate会话:

org.hibernate.Session session = (org.hibernate.Session)manager.getDelegate();

或者如果你在会话bean中,你可以使用@PersistenceContext注释来注入它。

更新:也许你的问题与hibernate的缓存有关。尝试设置

<shared-cache-mode>NONE</shared-cache-mode>

prersistence.xml中。 之后,manager.refresh(父母)应该这样做。

UPDATE2: 或者孩子们可能在LAZY系列中,在这种情况下,您有两种解决方案: 用以下内容注释孩子:

@OneToMany(cascade=CascadeType.REFRESH,fetch=FetchType.LAZY)

在这种情况下你还需要做manager.refresh(parent); 或使用:

 Hibernate.initialize(parent.getChidren());