Spring data jpa @Query update的坑及解決
Spring data jpa @Query update的坑
jpa默認只有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ù)據(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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java動態(tài)數(shù)組Arraylist存放自定義數(shù)據(jù)類型方式
這篇文章主要介紹了Java動態(tài)數(shù)組Arraylist存放自定義數(shù)據(jù)類型方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10
IntelliJ IDEA引入第三方jar包或查看Java源碼的時候報decompiled.class file byt
今天小編就為大家分享一篇關于IntelliJ IDEA引入第三方jar包或查看Java源碼的時候報decompiled.class file bytecode version:52.0(java 8)錯誤的解決辦法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-10-10

