@Modifying 注解和事务

@Modifying注解用于自定义更新操作,需配合返回影响行数的int类型方法及@Transactional事务管理。Spring Data默认查询为只读事务,若需修改,可在方法上添加@Transactional,并确保多个Repository操作在同一事务中处理,通常在service层实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@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>
  1. 定义的方法(PersonRepsotory 的实现接口中)
@Modifying
    @Query("UPDATE Person p SET p.email  = :email where id = :id")
    int updatePerson(@Param("email") String email, @Param("id") Integer id);
  1. 业务层中
@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);
    }


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值