欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

Spring data jpa @Query update的坑及解决

时间:2022-06-30 09:27:56|栏目:JAVA代码|点击:

Spring data jpa @Query update的坑

jpa默认只有save(Entity)方法,如果数据库中没有记录就新增,如果数据库中有记录就更新记录。

如果要手动添加update(Entity)方法,

可以参考这个例子

 @Modifying
 @Query(value = "UPDATE SmallFileEntity s SET s.length = '#{entity.getLength()}' , s.modificationTime = '#{entity.getModificationTime()}', s.accessTime = '#{entity.getAccessTime()}' WHERE s.autoId = '#{entity.getAutoId()}' ", nativeQuery = false)
 void updateLengthAndModificationTimeAndAccessTime(SmallFileEntity entity);

上例的重点是将EL表达式用单括号括起来。

EL表达式中是可以书写java语句的,在@Query注解中,EL表达式可以取到参数列表中的对象。

实在不行的话,就nativeQuery = true。

Spring data jpa的update操作

使用jpa进行update操作主要有两种方式:

1、调用保存实体的方法

1)保存一个实体:repository.save(T entity)

2)保存多个实体:repository.save(Iterable<T> entities)

3)保存并立即刷新一个实体:repository.saveAndFlush(T entity)

注:若是更改,entity中必须设置了主键字段,不然不能对应上数据库中的记录,变成新增(数据库自动生成主键)或报错(数据库不自动生成主键)了

2、@Query注解,自己写JPQL语句

例:

@Modifying
@Query("update ShopCoupon sc set sc.deleted = true where sc.id in :ids")
public void deleteByIds(@Param(value = "ids") List<String> ids);

注:

1)update或delete时必须使用@Modifying对方法进行注解,才能使得ORM知道现在要执行的是写操作

2)有时候不加@Param注解参数,可能会报如下异常:

org.springframework.dao.InvalidDataAccessApiUsageException: Name must not be null or empty!; nested exception i                is Java.lang.IllegalArgumentException: Name must not be null or empty! 

上一篇:java springboot中如何读取配置文件的属性

栏    目:JAVA代码

下一篇:Java NIO 中 Selector 解析

本文标题:Spring data jpa @Query update的坑及解决

本文地址:http://www.codeinn.net/misctech/206380.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有