Spring data jpa @Query update的坑及解決
Spring data jpa @Query update的坑
jpa默認(rèn)只有save(Entity)方法,如果數(shù)據(jù)庫中沒有記錄就新增,如果數(shù)據(jù)庫中有記錄就更新記錄。
如果要手動添加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表達式可以取到參數(shù)列表中的對象。
實在不行的話,就nativeQuery = true。
Spring data jpa的update操作
使用jpa進行update操作主要有兩種方式:
1、調(diào)用保存實體的方法
1)保存一個實體:repository.save(T entity)
2)保存多個實體:repository.save(Iterable<T> entities)
3)保存并立即刷新一個實體:repository.saveAndFlush(T entity)
注:若是更改,entity中必須設(shè)置了主鍵字段,不然不能對應(yīng)上數(shù)據(jù)庫中的記錄,變成新增(數(shù)據(jù)庫自動生成主鍵)或報錯(數(shù)據(jù)庫不自動生成主鍵)了
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知道現(xiàn)在要執(zhí)行的是寫操作
2)有時候不加@Param注解參數(shù),可能會報如下異常:
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!
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
非常適合新手學(xué)生的Java線程池優(yōu)化升級版
作者是一個來自河源的大三在校生,以下筆記都是作者自學(xué)之路的一些淺薄經(jīng)驗,如有錯誤請指正,將來會不斷的完善筆記,幫助更多的Java愛好者入門2022-03-03
Java動態(tài)數(shù)組Arraylist存放自定義數(shù)據(jù)類型方式
這篇文章主要介紹了Java動態(tài)數(shù)組Arraylist存放自定義數(shù)據(jù)類型方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10
IntelliJ IDEA引入第三方j(luò)ar包或查看Java源碼的時候報decompiled.class file byt
今天小編就為大家分享一篇關(guān)于IntelliJ IDEA引入第三方j(luò)ar包或查看Java源碼的時候報decompiled.class file bytecode version:52.0(java 8)錯誤的解決辦法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10

