获取执行jpql查询后更新的记录数
Get the number of records updated after executing a jpql query
如何在执行像
这样的jpql查询后获取更新的记录数
UPDATE Device d SET d.name =:Name WHERE d.locationId=:id
您可以使用 executeUpdate()
方法来获取计数:
Query query = em.createQuery(
"UPDATE Device d SET d.name =:Name WHERE d.locationId=:id");
int updateCount = em.executeUpdate();
@Modifying
@Query("UPDATE Device d SET d.name =:Name WHERE d.locationId=:id")
int updateDeviceName(@Param("Name ") int Name ,
@Param("id") int id);
该方法的return类型是一个整数,等于受影响的行数,但如果不需要或不需要,可以将其设置为void。添加 @Modifying(clearAutomatically = true)
以确保从过时的条目中清除 EntityManager 以确保数据的新鲜度。
这确保在执行查询时自动清除 EntityManager,确保没有实体不同步。这在某些情况下可能是可取的,但这取决于使用存储库方法的上下文,因此您必须小心处理;很容易在没有注意到或记住这种副作用的情况下使用这种方法,这可能会导致您的应用程序出现问题。希望单元测试会到位以发现这样的错误,但事实可能并非如此。所以明智地使用这个标志。
参考:-number of records update after executing an update query
如何在执行像
这样的jpql查询后获取更新的记录数UPDATE Device d SET d.name =:Name WHERE d.locationId=:id
您可以使用 executeUpdate()
方法来获取计数:
Query query = em.createQuery(
"UPDATE Device d SET d.name =:Name WHERE d.locationId=:id");
int updateCount = em.executeUpdate();
@Modifying
@Query("UPDATE Device d SET d.name =:Name WHERE d.locationId=:id")
int updateDeviceName(@Param("Name ") int Name ,
@Param("id") int id);
该方法的return类型是一个整数,等于受影响的行数,但如果不需要或不需要,可以将其设置为void。添加 @Modifying(clearAutomatically = true)
以确保从过时的条目中清除 EntityManager 以确保数据的新鲜度。
这确保在执行查询时自动清除 EntityManager,确保没有实体不同步。这在某些情况下可能是可取的,但这取决于使用存储库方法的上下文,因此您必须小心处理;很容易在没有注意到或记住这种副作用的情况下使用这种方法,这可能会导致您的应用程序出现问题。希望单元测试会到位以发现这样的错误,但事实可能并非如此。所以明智地使用这个标志。
参考:-number of records update after executing an update query