我有一个示例对象,其中包含 Foo 对象的 Collection 。
public class Sample {
private String name;
private List<Foo> fooList;
public String getName() {
return name;
}
public void setName(String n) {
name = n;
}
public List<Foo> getFooList() {
return fooList;
}
public void setFooList(List<Foo> list) {
fooList = list;
}
}
对象Sample和Foo在Hibernate中正确映射。
我打开啊Hibernate事务,我在缓存中有一个带有“name”=“tommaso”的Sample实例。 有人在DB中修改了“massimo”中的行和更改名称。 如果我想刷新缓存中的实例,我写
Sample sample = ...;
session.refresh(sample);
Hibernate刷新Sample对象的实例,属性 name 变为“massimo”。它有效!
如果有人编辑了此实例的集合,并在 fooList 中删除了一个 Foo ,那么当我刷新该实例 Sample 时, Hibernate抛出没有存在给定标识符的行。
如何使用db中的实际情况刷新会话缓存?
答案 0 :(得分:1)
您可以自己从缓存中捕获UnresolvableObjectException
和evict
样本:
public boolean refreshOrEvict(Session session, Object entity) {
try {
session.refresh(entity);
return true;
} catch (UnresolvableObjectException e) {
session.evict(entity);
return false;
}
}