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

例如,我的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无法分析查询并理解它是一个修改查询?

回答:

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

以上是 为什么我们必须对Data Jpa中的查询使用@Modifying批注 的全部内容, 来源链接: utcz.com/qa/418330.html

回到顶部