Spring data jpa @Query update的坑及解決
Spring data jpa @Query update的坑
jpa默認(rèn)只有save(Entity)方法,如果數(shù)據(jù)庫(kù)中沒有記錄就新增,如果數(shù)據(jù)庫(kù)中有記錄就更新記錄。
如果要手動(dòng)添加update(Entity)方法,
可以參考這個(gè)例子
?@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);
上例的重點(diǎn)是將EL表達(dá)式用單括號(hào)括起來。
EL表達(dá)式中是可以書寫java語(yǔ)句的,在@Query注解中,EL表達(dá)式可以取到參數(shù)列表中的對(duì)象。
實(shí)在不行的話,就nativeQuery = true。
Spring data jpa的update操作
使用jpa進(jìn)行update操作主要有兩種方式:
1、調(diào)用保存實(shí)體的方法
1)保存一個(gè)實(shí)體:repository.save(T entity)
2)保存多個(gè)實(shí)體:repository.save(Iterable<T> entities)
3)保存并立即刷新一個(gè)實(shí)體:repository.saveAndFlush(T entity)
注:若是更改,entity中必須設(shè)置了主鍵字段,不然不能對(duì)應(yīng)上數(shù)據(jù)庫(kù)中的記錄,變成新增(數(shù)據(jù)庫(kù)自動(dòng)生成主鍵)或報(bào)錯(cuò)(數(shù)據(jù)庫(kù)不自動(dòng)生成主鍵)了
2、@Query注解,自己寫JPQL語(yǔ)句
例:
@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時(shí)必須使用@Modifying對(duì)方法進(jìn)行注解,才能使得ORM知道現(xiàn)在要執(zhí)行的是寫操作
2)有時(shí)候不加@Param注解參數(shù),可能會(huì)報(bào)如下異常:
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!
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
log4j2 RollingRandomAccessFile配置過程
這篇文章主要介紹了log4j2 RollingRandomAccessFile配置過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07詳解Spring緩存注解@Cacheable,@CachePut , @CacheEvict使用
這篇文章主要介紹了詳解Spring緩存注解@Cacheable,@CachePut , @CacheEvict使用,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2017-05-05SpringBoot中@RestControllerAdvice @ExceptionHandler異常統(tǒng)一處
這篇文章主要介紹了SpringBoot中@RestControllerAdvice @ExceptionHandler異常統(tǒng)一處理類失效原因,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01Jackson反序列化@JsonFormat 不生效的解決方案
這篇文章主要介紹了Jackson反序列化@JsonFormat 不生效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08Mybatis學(xué)習(xí)筆記之動(dòng)態(tài)SQL揭秘
這篇文章主要給大家介紹了關(guān)于Mybatis學(xué)習(xí)筆記之動(dòng)態(tài)SQL的相關(guān)資料,小編覺得挺不錯(cuò)的,對(duì)大家學(xué)習(xí)或者使用Mybatis會(huì)有一定的幫助,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-11-11Springboot中的@ComponentScan注解使用解析
這篇文章主要介紹了Springboot中的@ComponentScan注解使用解析,@ComponentScan用于類或接口上主要是指定掃描路徑,spring會(huì)把指定路徑下帶有指定注解的類注冊(cè)到IOC容器中,需要的朋友可以參考下2024-01-01jsp、struts、spring、mybatis實(shí)現(xiàn)前端頁(yè)面功能模塊化拆分的方案
這篇文章主要介紹了 jsp、struts、spring、mybatis實(shí)現(xiàn)前端頁(yè)面功能模塊化拆分的方案,非常不錯(cuò),需要的朋友參考下2017-01-01java調(diào)用Oracle存儲(chǔ)過程的方法實(shí)例
這篇文章介紹了java調(diào)用Oracle存儲(chǔ)過程的方法實(shí)例,有需要的朋友可以參考一下2013-09-09