代码先锋网 代码片段及技术文章聚合

在Spring Data JPA 中使用Update Query更新实体类@DynamicUpdate,@DynamicInsert

对于 Spring Data JPA 进行指定字段进行更新时,可以使用下列代码

@Modifying
@Query("update User u set u.firstname = ?1 where u.lastname = ?2") 
int setFixedFirstnameFor(String firstname, String lastname);

首先让人奇怪的是,repository method只能返回int或者转为void,因为这个操作只会把数据写入到数据库,但是不会select。
执行完modifying query, EntityManager可能会包含过时的数据,因为EntityManager不会自动清除实体。
只有添加clearAutomatically属性,EntityManager才会自动清除实体对象。

@Modifying(clearAutomatically = true)
@Query("update RssFeedEntry feedEntry set feedEntry.read =:isRead where feedEntry.id =:entryId") 
void markEntryAsRead(@Param("entryId") Long rssFeedEntryId, @Param("isRead") boolean isRead);

这样是一个解决方案,当然也可以使用动态更新。在实体类上加上注解@DynamicUpdate, @DynamicInsert,这两个注解是jpa的实现hibernate才有的,当jpa的实现为hibernate时,才会生效,当有以上注解时,标记实体sql动态生成,当insert的时候,如果字段为NULL,则生成的sql语句不插入该字段,当update时,如果字段为NULL,则不生成update该字段,前提条件的是,当DynamicUpdate时,需要先执行select然后在update。

但是需要注意的是,当你select后,显示的把某些字段set为NULL,jpa为认为你修改了该字段,同样会生成到update语句中,所以动态的update只是为让update的sql语句减少不必要的null设置,并不能达到自己想要自定义的update。

版权声明:本文为weixin_34007906原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34007906/article/details/87108569

智能推荐

Spring Data Jpa使用

Spring Data Jpa简介 Spring Data JPA是Spring Data框架的一个模块。 Spring Data JPA依赖于Spring的核心jar,JPA只有接口和注解,Spring Data JPA的功能实现默是使用的Hibernate,因此还必须引入Hibernate对JPA的支持(整合)项目hibernate-entitymanager。 JPA编程是通过EntityM...

Spring Data JPA 使用

最近工作中会用到spring Data JPA 这里简单做下用法的总结 老三步 是什么 ,为什么用 ,怎么用。 1 Spring Data JPA 是什么 Spring Data JPA 是 spring data 项目下的一个模块。提供了一套基于 JPA标准操作数据库的简化方案。底层默认的是依赖 Hibernate JPA 来实现的。 2 优点 只需要定义接口并集成 Spring Data JP...

在spring data jpa使用UUID

2019独角兽企业重金招聘Python工程师标准>>> UUID优劣毋庸多说,如何在实体中进行定义 定义在实体公共类中BaseEntity.java 转载于:https://my.oschina.net/youway/blog/521213...

Spring data jpa 在jpql的where中使用枚举

spring data jpa中,内置了需要方便而实用的实现,写一个接口,继承JpaRepository<T,ID> 。这样你的这个接口就会有个实现类SimpleJpaRepository。它内置了很多方法,实现的接口:JpaRepository,JpaSpecificationExecutor,PagingAndSortingRepository,QueryByExampleExec...

spring data jpa写update

其中,@Modifying和@Transactional必须有...

猜你喜欢

Spring Boot Spring Data JPA创建实体类

在前面我们提到过ORM(Object Relational Mapping),这里面的O对应的是架构中应用层的对象实体。在JAP中,我们需要创建一个类对应这个实体,而这个实体一般对应着数据库中的一张表。接下来我们好好讲一下,如何创建一个实体类,以及相关的注解。 示例代码: 当我们创建好了这个实体类,运行项目,框架会扫描到该类的注解,并且查看数据库中是否有这么一张对应的表。如果存在该表,再检查对应的...

spring data jpa 使用实体类生成数据库文件 sql

在实体类中正确使用spring data jpa 的注解 配置文件编写 建立数据库,运行项目...

jpa 更新数据 update data

简介 使用jpa进行update操作主要有两种方式: 1、调用保存实体的方法 注:若是更改,entity中必须设置了主键字段,不然不能对应上数据库中的记录,变成新增(数据库自动生成主键)或报错(数据库不自动生成主键)了 2、@Query注解,自己写JPQL语句 @Modifying @Query("update ShopCoupon sc set sc.deleted = true wh...

Spring Data JPA映射自定义实体类

这个问题困扰了我2天=-=,好像也能使用 jpql解决 先说下自己的功能:查询oracle最近sql执行记录 sql很简单: 但是我用的是Spring Data JPA。。。。这个网上说不能将查询结果自动映射到自定义的实体类。。。。这就比较蛋疼了,在网上就找了个轮子。先上一下自己的Dao层,查出来的是集合数组,所以使用List< Object [ ] >接收【我将sql简化了一下,主要...

vue跳转同一个组件,参数不同,页面接收值知接收一次

作为vue的初用者,你可能会像我一样遇到一个问题,对跳转组件是,我们想通过参数不同,调用不同的方法。 例如: app.vue app…vue中的data数据: 在goods.vue中接受数据 当我循环输出这些链接,每个链接的地址都是一样的。参数不一样,当我们点击我们的按钮时 我们只会看到导航栏中的参数在变化,然而我们页面中的数并没有变化。这是为什么呢? 相信很多朋友也已经知道了,这是...