Spring-data-jpa 的@modifying注解

在项目的进行中需要通过 @Modifying 注解完成修改操作(注意:不支持新增)

1.之前有一个业务需要先查询一个结果集,然后将满足结果集中某个条件的另外一张表中的字段做一个属性值的更改,这个更改可能是多个的

代码如下

 

 

2.SQL语句如下

 

3.但是执行的过程中,控制台报错,如下

 

 Can not issue data manipulation statements with executeQuery().

 

4.后来发现没有添加  @Modifying注解

 

 

5.聊一聊@Modifying注解的实际使用

 

例如一下测试

@Modifying @Query("update Person set email = :email where lastName =:lastName")

void updatePersonEmailByLastName(@Param("lastName")String lastName,@Param("email")String email);

 

执行报错,异常如下,

关键看这行 Caused by: javax.persistence.TransactionRequiredException: Executing an update/delete query,说明我们缺少事务配置。

 

可以在service实现类上面添加事物注解,也可以在方法上面添加事物注解,或者在xml 文件中添加service事物控制器的管理

@Service 

@Transactional

 

<context:component-scan base-package="com.liwei.springdata.service"></context:component-scan>

 

 

 

总结如下

(1)可以通过自定义的 JPQL 完成 UPDATE 和 DELETE 操作。 注意: JPQL 不支持使用 INSERT; 
(2)在 @Query 注解中编写 JPQL 语句, 但必须使用 @Modifying 进行修饰. 以通知 SpringData, 这是一个 UPDATE 或 DELETE 操作 
(3)UPDATE 或 DELETE 操作需要使用事务,此时需要定义 Service 层,在 Service 层的方法上添加事务操作; 
(4)默认情况下, SpringData 的每个方法上有事务, 但都是一个只读事务。 他们不能完成修改操作。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值