Hibernate刷新会话与DB中已删除的对象

时间:2014-03-27 10:31:15

标签: java spring hibernate

我有一个示例对象,其中包含 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中的实际情况刷新会话缓存?

1 个答案:

答案 0 :(得分:1)

您可以自己从缓存中捕获UnresolvableObjectExceptionevict样本:

public boolean refreshOrEvict(Session session, Object entity) {
    try {
        session.refresh(entity);
        return true;
    } catch (UnresolvableObjectException e) {
        session.evict(entity);
        return false;
    }
}