我有带有preUpdate()
方法的模型类,它用@PreUpdate 注释。此方法调用我的方法deleteCache()
:
public void deleteCache() {
final List<Model> models = Model.findAll();
for (final Model model : models) {
Cache.remove(model.id);
}
}
我的Model.findAll()
实现:
public static List<Model> findAll() {
Query query = JPA.em().createQuery("SELECT o FROM Model o");
return query.getResultList();
}
当我触发 Model.save() 时,我的 preUpdate 方法被调用,它调用 deleteCache,但是当return query.getResultList()
到达时 preUpdate 方法被再次调用,所以我得到了 StackoverflowException。
谁能向我解释为什么即使模型没有更改也会调用 preUpdate 方法?代码有问题吗?谢谢。
编辑:我读了这篇文章,所以 em.flush() 被调用。但是没有 UPDATE、INSERT 调用。