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

问题描述 投票:0回答:2

如何在执行像

这样的jpql查询后获取更新的记录数
UPDATE Device d SET d.name =:Name WHERE d.locationId=:id
hibernate jpa jpql
2个回答
21
投票
@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
,从而确保没有实体不同步。在某些情况下这可能是可取的,但这取决于使用存储库方法的上下文,因此您必须小心这一点;使用这种方法很容易,而不会注意到或记住这种副作用,这可能会导致您的应用程序出现问题。希望单元测试能够发现这样的错误,但情况可能并非如此。所以明智地使用这个标志。

参考:-执行更新查询后更新的记录数


6
投票

您可以使用

executeUpdate()
方法来获取计数,如下所示:

Query query = em.createQuery(
  "UPDATE Device d SET d.name =:Name WHERE d.locationId=:id");
int updateCount = em.executeUpdate();
© www.soinside.com 2019 - 2024. All rights reserved.