项目正在进行时,需要在@Modifying注释中完成更正操作。 (注意:不支持添加新内容。 )
1 .以前,某个业务需要查询结果集,然后在结果集中满足某些条件的另一个表中更改字段的属性值。 这个变更可能有多个
代码如下所示
2.SQL语句包括:
3 .但是,在运行过程中,控制台将报告错误如下
cannotissuedatamanipulationstatementswithexecutequery ()。
4 .后来发现没有添加@Modifying注释
谈谈@Modifying注释的实际使用吧
例如,测试
@ modifying @ query (updatepersonsetemail=: emailwherelastname=: last name ) )。
voidupdatepersonemailbylastname @param (last name ) String lastName,@ param ) ) email ) String email;
执行错误、异常如下。
通过查看此caused by : javax.persistence.transactionrequiredexception : executinganupdate/delete query,可以发现缺少事务配置
您可以将service事务控制器管理添加到service实现类、方法或xml文件中
@Service
@Transactional
context 3360 component-scan base-package=' com.Liwei.spring data.service '/context 3360 component-scan
总结如下
)1)可以通过自定义JPQL进行UPDATE和DELETE操作。 注意: JPQL不支持使用INSERT;
)2)在@Query注释中写入JPQL语句,但必须用@Modifying进行限定。 通知SpringData这是一个更新或删除操作
)3)必须在UPDATE或DELETE操作中使用事务,如果是这样,则必须定义Service层,并将事务操作添加到Service层的方法中;
)4)缺省情况下,SpringData中的每个方法都有一个事务,但它是只读事务。 他们无法完成修改操作。
原文: https://www.cn blogs.com/Mr-wuxian sheng/p/6189270.html