java - PreUpdate 监听器在空更新期间触发

标签 java jpa sql-update jpql

我有一个具有最后修改属性的实体:

@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/

相关文章:

java - 如何用html测试java小程序?

java - Spring jpa中如何指定主键可以为空

java - 当我们使用 hibernate 创建主键时,我们使用 @Id 作为注释,但是应该使用什么注释来定义外键

java - JPA EntityManager 的设计负责人

php - 如何将这两个查询合并为一个?

MySQL 触发器 - 更新后删除

sql - 从两个表更新时使用case when语句

java - 如何在 spring config 中手动连接 hibernate session 工厂

java - 知道 akka actors 何时完成

Windows 7 中的 Java swing 最大化