作者简介
陈喆,现就职于中科院某研究所担任副研究员,专注于工业云平台、MES系统的设计与研发。
内容来源:https://docs.spring.io/spring-data/jpa/docs/2.0.9.RELEASE/reference/html/#jpa.modifying-queries
添加自定义修改行为可以参考Custom Implementations for Spring Data Repositories。但该文适用于综合性的自定义功能,如果只使用带有参数绑定的查询语句,也可以通过@Modifying注解query方法创建修改语句。
@Modifying
@Query("update User u set u.firstname = ?1 where u.lastname = ?2")
int setFixedFirstnameFor(String firstname, String lastname);
上面的写法将会触发一个更新操作而非查询操作。当执行完修改操作后,EntityManager
会保留过时的实体对象,不会作自动清理,这样可以删除掉EntityManager中未清空的变更。如果希望EntityManager自动清理,将@Modifying注解的clearAutomatically属性设置为true.
派生的删除语句
Spring Data JPA支持派生的删除语句,避免显示声明JPQL语句:
interface UserRepository extends Repository<User, Long> {
void deleteByRoleId(long roleId);
@Modifying
@Query("delete from User u where user.role.id = ?1")
void deleteInBulkByRoleId(long roleId);
}