zoukankan      html  css  js  c++  java
  • 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 的每个方法上有事务, 但都是一个只读事务。 他们不能完成修改操作。

  • 相关阅读:
    白盒测试 语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖(转)
    白盒测试--基本路径测试法详细说明和举例
    测试用例编写规范
    EF数据库连接时候出错
    元祖,字典,列表及其内置方法
    字符串、列表练习’
    数字,字符串,列表及其内置方法
    流程控制代码练习
    易出错知识点
    流程控制if、while、for
  • 原文地址:https://www.cnblogs.com/mr-wuxiansheng/p/6189270.html
Copyright © 2011-2022 走看看