我知道这不是您问题的直接答案,因为您已经构建了修复程序并在Github上启动了pull请求。谢谢你!
但是我想解释一下您可以使用的JPA方法。因此,您想更改符合特定条件的所有实体,并更新每个实体的值。通常的方法是加载所有需要的实体:
@Query("SELECt * FROM Email e where e.active = true and e.expire <= NOW()")List<Email> findExpired();然后遍历它们并更新值:
for (Email email : findExpired()) { email.setActive(false);}现在,hibernate知道所有更改,如果事务完成或您
EntityManager.flush()手动调用,它们会将它们写入数据库。我知道如果您有大量的数据条目,这将无法正常工作,因为您将所有实体都加载到了内存中。但这是使hibernate实体高速缓存,第二级高速缓存和数据库保持同步的最佳方法。
这个答案是否说“ @Modifying”注释没有用?没有!如果您确保修改后的实体不在本地缓存中(例如,只写应用程序),则此方法只是解决之道。
仅作记录:您不需要
@Transactional存储库方法。
仅用于记录v2:该
active列看起来像直接与相关
expire。那么,为什么不
active完全删除并仅
expire在每个查询中查找呢?



