小编典典

为什么我们必须对Data Jpa中的查询使用@Modifying批注

java

例如,我的CRUD界面中有一个方法可以从数据库中删除用户:

public interface CrudUserRepository extends JpaRepository<User, Integer> {

    @Transactional
    @Modifying
    @Query("DELETE FROM User u WHERE u.id=:id")
    int delete(@Param("id") int id, @Param("userId") int userId);
}

此方法仅适用于注释@Modifying。但是这里需要注释吗?为什么Spring无法分析查询并理解它是一个修改查询?


阅读 224

收藏
2020-09-23

共1个答案

小编典典

这将触发注释为方法的查询,作为更新查询而不是选择查询。由于执行修改查询后EntityManager可能包含过时的实体,因此我们会自动清除它(有关详细信息,请参阅EntityManager.clear()的JavaDoc)。这将有效地删除所有尚未刷新的仍在EntityManager中挂起的更改。如果您不希望自动清除EntityManager,则可以将@Modifying批注的clearAutomatically属性设置为false;否则,请执行以下步骤。

有关更多详细信息,请单击此链接:

http://docs.spring.io/spring-
data/jpa/docs/1.3.4.RELEASE/reference/html/jpa.repositories.html

2020-09-23