2015-01-07 26 views
2

我有一個類叫做VoceMenuUtente,標註爲@Entity對象的領域,以2場:數據庫由Spring自動更新/休眠當我改變一類

  1. Descrizione
  2. Titolo

我做了一個select來獲取數據庫中的數據。打印在屏幕上之前,我必須添加一個字符串值從數據庫中得到的,所以我這樣做:

voceMenuUtente.setDescrizione = voceMenuUtente.getDescrizione + "blablabla"; 

我提出,在一個類中調用TransactionPreDAO。我有該類的切入點:

<tx:advice id="txAdviceTransactionPreDAO" transaction-manager="transactionManager" > 
      <tx:attributes> 
       <tx:method name="*"/> 
      </tx:attributes> 
     </tx:advice>  
     <aop:config> 
      <aop:pointcut id="transactionPreDAOTxPointcut" expression="execution(* com.springgestioneerrori.preDAO.TransactionPreDAO.*(..))" /> 
      <aop:advisor advice-ref="txAdviceTransactionPreDAO" pointcut-ref="transactionPreDAOTxPointcut" /> 
     </aop:config> 

在此之後,我的數據庫會自動更新,並在該領域Descrizione我沒有了原來的價值,但我有原來的值加「blablabla」 ?

爲什麼會發生這種情況?對於對象VoceMenuUtente,我沒有任何「更新」方法。也許這取決於切入點。我還在學習春季,所以我可能犯了一些錯誤。

是否取決於我在標籤<tx:method name="*"/>

回答

4

錯過read-only="true"一旦你通過get,查詢,標準等加載從數據庫中的對象,該對象狀態與持久化上下文相關聯的事實,任何對它的更改會自動傳播到數據庫。

您不必在該對象上顯式調用updateupdate用於重新附加與會話分離的對象。一個以前一直存在的對象,但當前不與Hibernate會話相關聯。

如果您想覆蓋該默認行爲,您可以撥打session.evict(voceMenuUtente)。這將使對象分離(從持久化上下文中驅逐對象)。

+0

謝謝你的解釋。根據我在網上閱讀的內容,我也可以使用只讀=「true」,不是嗎?根據我的代碼,這將是一個更好的解決方案 – MDP

+0

是的,如果你只有那一個選擇,你可以在這種情況下使用只讀事務。在這種情況下,Hibernate不會執行髒檢查,所以不會更新 –