hibernate - 获取执行jpql查询后更新的记录数

标签 hibernate jpa jpql

如何在执行像这样的 jpql 查询后获取更新的记录数

UPDATE Device d SET d.name =:Name WHERE d.locationId=:id

最佳答案

@Modifying  
@Query("UPDATE Device d SET d.name =:Name WHERE d.locationId=:id")
int  updateDeviceName(@Param("Name ") int Name ,
        @Param("id") int id);

该方法的返回类型是 Integer,它等于受影响的行数,但如果不需要或没有必要,可以将其设置为 void。添加@Modifying(clearAutomatically = true)确保 EntityManager 清除过时的条目,以确保数据的新鲜度。

这可确保在执行查询时自动清除 EntityManager,从而确保没有实体不同步。在某些情况下这可能是可取的,但这取决于使用存储库方法的上下文,因此您必须小心这一点;使用这种方法很容易,而不会注意到或记住这种副作用,这可能会导致您的应用程序出现问题。希望单元测试能够发现这样的错误,但情况可能并非如此。因此请明智地使用此标志。

引用:- number of records update after executing an update query

关于hibernate - 获取执行jpql查询后更新的记录数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33936581/

相关文章:

java - JPA 按列表元素属性从实体顺序中选择 List<Object>

java - Hibernate 中的身份生成器是单例吗?

java - Hibernate 的外键问题(Bug?)

java - eclipselink 出现 MySQL 语法错误异常

java - JPA - 设置双向关系 -> 从 OneToMany-Collection 加载所有元素的开销很大吗?

java - Spring Boot MSSQL Kerberos 身份验证

java - 对一段时间内的每一天做一个查询,把它变成一个查询

java - 用于检索复杂实体的高效 JPQL 查询

java - 获取事务在不同线程异常中回滚

sql - 使用 JPA/Hibernate 进行国际化的最优雅的解决方案?