例如,我的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;