【问题标题】:Hibernate refresh session with deleted object in DB休眠刷新会话与数据库中的已删除对象
【发布时间】:2014-03-27 10:31:15
【问题描述】:

我有一个对象 Sample,其中包含 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 实例。 有人在数据库中修改该行并在“massimo”中更改名称。 如果我想刷新缓存中的实例,我会写

Sample sample = ...;
session.refresh(sample);

Hibernate 刷新 Sample 对象的实例,属性 name 变为“massimo”。有效!

如果有人编辑此实例的集合,并删除 fooList 中的一个 Foo,当我刷新该实例 Sample 时, Hibernate 抛出不存在具有给定标识符的行

如何根据数据库中的实际情况刷新会话缓存?

【问题讨论】:

    标签: java spring hibernate


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-18
      • 2011-12-07
      • 1970-01-01
      • 2013-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多