1

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

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

我需要不再从休眠中看到已删除的实体。

我试过了(这些都没用):

1) manager.refresh(父);

2)手动刷新删除的实体

3)重新加载所有孩子的父母。

我该怎么做?

4

2 回答 2

0

尝试

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

(您可能还需要分离孩子,特别是如果您在移除它们之前对其进行了修改)

于 2012-05-26T22:25:41.450 回答
0

呼吁session.evict(childEntity)所有孩子,其中 session 是您的休眠会话。

要获得休眠会话,请使用:

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

或者,如果您在会话 bean 中,您可以使用@PersistenceContext注释将其注入。

更新:也许您的问题与休眠的缓存有关。尝试设置

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

在你的prersistence.xml. 之后, manager.refresh(parent) 应该可以解决问题。

更新2:或者孩子们可能在一个懒惰的集合中,在这种情况下你有两个解决方案:用以下方式注释孩子:

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

在这种情况下,您仍然需要执行 manager.refresh(parent); 或使用:

 Hibernate.initialize(parent.getChidren());
于 2012-05-26T22:26:04.477 回答