我有一个场景,需要首先根据条件更新一些数据库记录,然后再从数据库中读取这些记录。我正在使用CrudReposirtory
,并且在我的控制器中有一个服务,该服务使用@Query
调用存储库方法来更新记录,并在下一行尝试读取相同的记录,但记录未更新除非我不知道那种控制器方法。
答案 0 :(得分:4)
如果执行@Modifying
语句,则应将@Query
与UPDATE
结合使用。
摘自文档:
@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;