例如,我的 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 分析查询并理解它是一个修改查询?
原文由 Artyom Emelyanenko 发布,翻译遵循 CC BY-SA 4.0 许可协议
这将触发对方法注释的查询作为更新查询而不是选择查询。由于 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