@Modifying 注解和事务
- @Query 与 @Modifying 这两个注解可以定义个性话更新操作,
@Modifying
@Query("UPDATE Person p SET p.email = :email where id = :id")
void updatePerson(@Param("email") String email, @Param("id") Integer id);
PS : 方法的返回值应该时int ,表示更新语句所影响的行数,在调用的地方必须添加事务 ,否则无法正常执行
- SPring Data 提供了默认的事务处理方式,即所有的查询为只读事务
- 对于自己定义的方法,如果改变SpringData 提供的默认事务,可以在方法上添加@Transactional
- 进行多个Repository操作时,也应该使他们在同一个事务中处理, 需要在service层实现多个Repository的调用 并在相应的方法上声明事务。
、PS : 出现了service层 因此需要在配置文件中添加自动扫描包
<!-- 配置自动扫描包 -->
<context:component-scan base-package="com.atgugui.springdata"></context:component-scan>
- 定义的方法(PersonRepsotory 的实现接口中)
@Modifying
@Query("UPDATE Person p SET p.email = :email where id = :id")
int updatePerson(@Param("email") String email, @Param("id") Integer id);
- 业务层中
@Service
public class PersonService {
@Autowired
private PersonRepsotory person;
public void savePersons(List<Person> persons){
person.save(persons);
}
@Transactional
public void updateTest(String email, Integer id){
person.updatePerson(email, id);
}
}