У меня есть две сущности (пример максимально уменьшен; у каждой сущности есть поле идентификатора):
@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();