我在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)与所有孩子一起重新加载父母。
我该怎么做?
答案 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());