2013-07-26 35 views
1

我正在使用Spring JPARepository與hibernate並且有一個關於實體更新的問題。 我通過傳遞一個單獨的實體來調用jparepository.save(實體),但是在跟蹤日誌中我也可以看到爲數據庫中的其他行發佈的更新語句。 在調用保存之前,我有一個findAll,一些實體的值正在改變。 但我只傳遞一個實體進行保存,但仍然保存所有更新的實體。 你能否提供這方面的任何信息?使用Hibernate SPRING JPA更新所有實體實例即使使用一個實體調用save也是如此

+0

您可以發佈您用來幫助人們查看實際發生的代碼。 –

回答

3

當你從數據庫加載實體時,這個實體就是「被管實體」。 如果更改「管理實體」(稍後提交事務),則不需要明確保存它們。 (這就是「管理」的意思。)

但直到Hibernate不會立即更新數據庫,而是會等待:

  • 您提交事務
  • 調用EntityManager.flush
  • 你執行一些數據庫查詢或通過Hibernate保存! (當你繞過Hibernate和通過普通的JDBC執行例如查詢/春天JDBC模板,那麼你就需要調用EntityManager.flush第一,如果不是你可能不會看到不噴射沖洗數據(https://stackoverflow.com/a/29825882/280244))

而且這是你觀察到的:

  • 1)加載一些實體,使他們成爲管理
  • 2)修改它們,但冬眠還是不執行SQL更新
  • 3)您查詢一些實體或保存一個實體,hibernate刷新更改
+0

謝謝拉爾夫。我知道了 –

相關問題