Spring Date JPA 更新部分字段


在Spring Data JPA 中,新增和更新操作都是用save()的方式進行,JPA是通過什么方法來知道我們是要進行insert還是update呢? 經過測試,JPA對程序調用的save()方法判斷是updata或者insert操作的依據是看實體對象的主鍵是否被賦值。 JPA首先會通過主鍵去查詢數據庫中是否已經有該ID,如果未查到,那么就執行insert方法,相反如果查到就會執行update方法。 關於更新部分字段: JPA只能判斷出是執行insert還是update,它不能判斷出我們是否更新部分字段。所以沒有被我們賦值的字段都會被覆蓋為NULL。 由此,通過實體對象進行更新時不可取的。 JPA的更新字段的方法有兩種: 1.通過設置主鍵進行save()保存。 使用save()方法更新字段一定要通過Repository獲取實體對象,在此對象上進行更新操作。 2.通過注解@Query實現復雜的sql語句。 在執行update或者delete方法時,必須加上注解@Modifying 和 @Transactional。

1
2
3
4
5
6
7
8
9
@Modifying
@Transactional
@Query ( "update Test a set "  +
        "a.name = CASE WHEN :#{#testAre.name} IS NULL THEN a.name ELSE :#{#testAre.name} END ,"  +
        "a.age = CASE WHEN :#{#testAre.age} IS NULL THEN a.age ELSE :#{#testAre.age} END ,"  +
        "a.insertTime = CASE WHEN :#{#testAre.insertTime} IS NULL THEN a.insertTime ELSE :#{#testAre.insertTime} END ,"  +
        "a.spare =  CASE WHEN :#{#testAre.spare} IS NULL THEN a.spare ELSE :#{#testAre.spare} END "  +
        "where a.id = :#{#testAre.id}" )
int  update( @Param ( "testAre" ) TestAre testAre);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM