[英]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
移至單獨的類,並將其映射為強制性一對一關系。 確保沒有從Data
到DataCache
級聯刷新。 這樣,您可以完全控制要刷新的內容和要加載的內容。
為什么每當對象觸發數據庫上的觸發器以使其與持久值保持同步時,為何不更新域中的referenceCount。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.