例如,我的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;否则,请执行以下步骤。
有关更多详细信息,请单击此链接:
http://docs.spring.io/spring- data/jpa/docs/1.3.4.RELEASE/reference/html/jpa.repositories.html