Spring Boot + JPA-CrudRepository更新,然后阅读

时间:2018-11-16 14:10:58

标签: spring spring-boot spring-data-jpa

我有一个场景,需要首先根据条件更新一些数据库记录,然后再从数据库中读取这些记录。我正在使用CrudReposirtory,并且在我的控制器中有一个服务,该服务使用@Query调用存储库方法来更新记录,并在下一行尝试读取相同的记录,但记录未更新除非我不知道那种控制器方法。

1 个答案:

答案 0 :(得分:4)

如果执行@Modifying语句,则应将@QueryUPDATE结合使用。

摘自文档:

@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;