簡體   English   中英

如何使用Hibernate最佳地更新對象中的單個屬性?

[英]How can I optimally update a single property in an object using Hibernate?

我有一個對象:

public class Data {
    private long           id;
    private long           referenceCount;
    private Blob           dataCache;

    /* getters and setters for the above */
}

與此對應的是一個映射:

<hibernate-mapping>
  <class name=Data" table=DATA">

    <id name=id" type="long">
      <column name=DATA_ID" precision="20" scale="0" />
      <generator class="assigned" />
    </id>

    <property name="referenceCount" type="long" generated="always" insert="false" update="false">
      <column name="REFERENCE_COUNT" precision="10" scale="0" not-null="true" />
    </property>
    <property name=dataCache" type="blob">
      <column name="DATA" />
    </property>
  </class>
</hibernate-mapping>

“ dataCache”的內容可能很大。

這就是棘手的地方:referenceCount的值由觸發器設置,由與數據實體沒有映射關系的對象調用。 保存該對象后,我必須刷新一個數據對象(會話可能已加載或可能尚未加載),以保持引用計數正確。 拋開這是否被視為一個好主意,我必須確保我的本地會話中referenceCount的值是最新的,但是我不想重新加載dataCache blob。 我可以在該屬性上設置lazy屬性,但是我不確定它是否會按照我希望的那樣起作用。

我應該怎么做? 我猜想我可以用一種方式看待它:“如何從會話緩存中刪除一個對象,如果該對象還不存在,則不加載該對象?”

根據此論壇帖子 ,類型java.sql.Blob/Clob字段應支持延遲加載。 因此,可以期望,如文檔所指定的那樣,對Data的持久實例執行Session.refresh()會從底層數據庫重新讀取給定實例的狀態,但不會加載dataCache

不過,我還是建議您將dataCache移至單獨的類,並將其映射為強制性一對一關系。 確保沒有從DataDataCache級聯刷新。 這樣,您可以完全控制要刷新的內容和要加載的內容。

為什么每當對象觸發數據庫上的觸發器以使其與持久值保持同步時,為何不更新域中的referenceCount。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM