【发布时间】:2018-11-16 14:10:58
【问题描述】:
我有一个场景,需要先根据条件更新一些数据库记录,然后从数据库中读取这些记录。我正在使用CrudReposirtory,在我的控制器中我有一个服务,它使用@Query 调用存储库方法来更新记录,并且在下一行我试图读取相同的记录,但除非我是,否则记录不会更新脱离那个控制器方法。
【问题讨论】:
标签: spring spring-boot spring-data-jpa
我有一个场景,需要先根据条件更新一些数据库记录,然后从数据库中读取这些记录。我正在使用CrudReposirtory,在我的控制器中我有一个服务,它使用@Query 调用存储库方法来更新记录,并且在下一行我试图读取相同的记录,但除非我是,否则记录不会更新脱离那个控制器方法。
【问题讨论】:
标签: spring spring-boot spring-data-jpa
如果您执行UPDATE 语句,则应将@Modifying 与@Query 结合使用。
来自文档:
@Modifying
@Query("update User u set u.firstname = ?1 where u.lastname = ?2")
int setFixedFirstnameFor(String firstname, String lastname);
这将触发注释到方法的查询作为更新查询而不是选择一个。由于在执行修改查询后 EntityManager 可能包含过时的实体,我们会自动清除它(有关详细信息,请参阅 EntityManager.clear() 的 JavaDoc)。这将有效地删除仍在 EntityManager 中待处理的所有未刷新的更改。如果您不希望 EntityManager 被自动清除,您可以将 @Modifying 注解的 clearAutomatically 属性设置为 false;
【讨论】: