我有两个实体(示例尽量减少;每个实体都有一个id字段):
@Entity
public class A {
@Column(nullable = false)
private double foo;
@Formula(value = "foo - (select coalesce(sum(x.foo), 0) from x where x.a_id = id)")
private double bar;
}
和
@Entity
public class X {
@ManyToOne(optional = false)
private A a;
@Column(nullable = false)
private double foo;
}
创建新的
X
(new X()
,beginTransaction()
,save(x)
,commit()
)时,A.bar的值不会刷新。我认为发生这种情况是因为旧的(错误的)值仍在第一级缓存中(没有第二级缓存)。我不想调用
Session.clear()
,因为此方法似乎会使现有的实体对象无效。我还能做些什么来解决这个问题?编辑:按要求在这里是保存
X
-对象的代码:// setters
getSession().beginTransaction(); // getSession() returns the current session
getSession().save(entity); // entity is an instance of X
getSession().getTransaction().commit();
最佳答案
Session.clear将从会话中删除所有缓存的对象。相反,您可以在会话上使用evict方法并指定一个对象,该对象仅从高速缓存中删除指定的对象。