我有一个具有最后修改属性的实体:
@Temporal(TemporalType.TIMESTAMP)
private Date lastModified;
@PreUpdate
@PrePersist
protected void onUpdate() {
lastModified = new Date();
}
和一个命名的 jpql 更新查询,它为旧实体设置一些属性:
update entity e set ... where e.lastModified < :threshold
onUpdate() 方法即使对于未修改的实体也会被调用,即事件如果:
entityManager.createQuery("...").executeUpdate();
返回零作为更新实体的数量。
我可以只更新旧的实体而不触及最近的实体吗? threshold 参数在更新后的实体中是未知的,所以我无法将更新移动到 onUpdate() 方法中。 native 查询可以帮助我吗?
最佳答案
为什么不在 lastModified 字段上用 @Version
替换 @PreUpdate/@PrePersist
机制?这样所有更新的实体都将设置字段(并且只有更新的实体)。
如果我能很好地理解您的情况,它应该会如您所愿地完成工作。
关于java - PreUpdate 监听器在空更新期间触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16666613/