java - 数据库中已删除对象的 Hibernate 刷新 session

标签 java spring hibernate

我有一个对象 Sample,它包含一个 Collection Foo 对象。

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 抛出不存在具有给定标识符的行

如何使用数据库中的实际情况刷新 session 缓存?

最佳答案

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

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

关于java - 数据库中已删除对象的 Hibernate 刷新 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22684834/

相关文章:

java - Java中按实体类型检索存储库

java - hibernate 搜索配置

java - 在android中从另一个音频文件中减去一个音频文件

spring - 如何集成测试 Spring Shell v2.x

java - 测试 ehcache

spring - Jackson 将日期序列化为时间戳

spring - JPA/Hibernate : create database schema and import data on first run, 在后续运行中更新架构

java - 使用 Hibernate Envers 的复合表

java - 如何在 Java/OpenGL 中使缩放后的图像看起来更好?

java - 在 J2ME 中的 LWUIT 表中自定义创建单元格