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

时间: 2024-10-12 03:59:38

Spring-data-jpa 的@modifying注解的相关文章

Spring Boot教程35——Spring Data JPA

Hibernate是数据访问解决技术的绝对霸主.JPA是由Hibernate主导的一个基于O/R映射的标准规范.O/R映射即将领域模型类和数据库的表进行映射,通过程序操作对象而实现表数据操作的能力,让数据访问操作无须关注数据库相关的技术. Spring Data JPA介绍 1.定义数据访问层 使用Spring Data JPA建立数据访问层十分简单,只需定义一个继承JpaRepository的接口即可: public interface PersonRepository extends Jpa

初入spring boot(五 )Spring Data JPA

Spring Data JPA通过提供基于JPA的Repository极大地减少JPA作为数据访问方案的代码量. 1.定义数据访问层 使用Spring Data JPA建立数据访问层十分简单,只需定义一个继承JpaRepository的接口即可,接口如下: 1 @RepositoryRestResource(path = "people") 2 public interface PersonRepository extends JpaRepository<Person, Long

Spring Data Jpa (四)注解式查询方法

详细讲解声明式的查询方法 1 @Query详解 使用命名查询为实体声明查询是一种有效的方法,对于少量查询很有效.一般只需要关心@Query里面的value和nativeQuery的值.使用声明式JPQL查询有一个好处,就是启动的时候就知道语法正确与否. 声明一个注解在Repository的查询方法上. Like查询,注意firstname不会自动加上%关键字的 直接用原始SQL. nativeQuery不支持直接Sort的参数查询 错误方式: 正确方式: [email protected]排序

深入浅出学Spring Data JPA

第一章:Spring Data JPA入门   Spring Data是什么 Spring Data是一个用于简化数据库访问,并支持云服务的开源框架.其主要目标是使得对数据的访问变得方便快捷,并支持map-reduce框架和云计算数据服务. Spring Data 包含多个子项目: Commons - 提供共享的基础框架,适合各个子项目使用,支持跨数据库持久化 JPA - 简化创建 JPA 数据访问层和跨存储的持久层功能 Hadoop - 基于 Spring 的 Hadoop 作业配置和一个 P

Spring Data JPA

转自: http://www.cnblogs.com/WangJinYang/p/4257383.html Spring 框架对 JPA 的支持 Spring 框架对 JPA 提供的支持主要体现在如下几个方面: 首先,它使得 JPA 配置变得更加灵活.JPA 规范要求,配置文件必须命名为 persistence.xml,并存在于类路径下的 META-INF 目录中.该文件通常包含了初始化 JPA 引擎所需的全部信息.Spring 提供的 LocalContainerEntityManagerFa

快速搭建springmvc+spring data jpa工程

一.前言 这里简单讲述一下如何快速使用springmvc和spring data jpa搭建后台开发工程,并提供了一个简单的demo作为参考. 二.创建maven工程 http://www.cnblogs.com/hujunzheng/p/5450255.html 三.配置文件说明 1.application.properties jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/springdata?u

了解 Spring Data JPA

前言 自 JPA 伴随 Java EE 5 发布以来,受到了各大厂商及开源社区的追捧,各种商用的和开源的 JPA 框架如雨后春笋般出现,为开发者提供了丰富的选择.它一改之前 EJB 2.x 中实体 Bean 笨重且难以使用的形象,充分吸收了在开源社区已经相对成熟的 ORM 思想.另外,它并不依赖于 EJB 容器,可以作为一个独立的持久层技术而存在.目前比较成熟的 JPA 框架主要包括 Jboss 的 Hibernate EntityManager.Oracle 捐献给 Eclipse 社区的 E

使用 Spring Data JPA 简化 JPA 开发

从一个简单的 JPA 示例开始 本文主要讲述 Spring Data JPA,但是为了不至于给 JPA 和 Spring 的初学者造成较大的学习曲线,我们首先从 JPA 开始,简单介绍一个 JPA 示例:接着重构该示例,并引入 Spring 框架,这两部分不会涉及过多的篇幅,如果希望能够深入学习 Spring 和 JPA,可以根据本文最后提供的参考资料进一步学习. 自 JPA 伴随 Java EE 5 发布以来,受到了各大厂商及开源社区的追捧,各种商用的和开源的 JPA 框架如雨后春笋般出现,为

JavaEE 之 Spring Data JPA

1.事务 a.事务的关键属性(ACID) ①原子性(atomicity):事务的原子性确保动作要么全部完成,要么完全不起作用 ②一致性(consistency):一旦所有事务动作完成,事务就被提交.也就是说要么都成功,要么都不成功 ③隔离性(isolation):多个事物同时处理一个数据的时候,每个事物都应该与其他事务隔离开来,防止数据损坏 ④持久性(durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响.应该被持久化到数据库中 b.事务的传播行为 ①REQUERE

spring data jpa 的使用

使用spring data jpa 开发时,发现国内对spring boot jpa全面介绍的文章比较少案例也比较零碎,因此写文章总结一下. spring data jpa介绍 首先了解JPA是什么? JPA(Java Persistence API)是Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据.他的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate,TopLink,JDO等ORM框架各自为营