簡體   English   中英

Hibernate中的有效實體更新?

[英]Effective Entity Update In Hibernate?

如何通過使用SQL在hibernate中“有效”更新實體。

例如:我有一個Product實體,其字段名稱為createTime 當我使用session.saveOrUpdate(product)我必須從數據庫獲取此字段,然后設置為product然后更新,實際上每當我使用session.saveOrUpdate() ,我都更新了所有字段,即使我只需要更新一個字段。 但是大多數時候我們傳遞給DAO層的值對象不能包含所有字段信息,比如Product中的createDate ,我們很少需要更新這個字段。

如何更新所選字段? 當然我可以使用HQL,但這將分離保存和更新邏輯。

如果Hibernate有這樣的方法會更好:

session.updateOnlyNotNullFields(product);

我怎么能在Hibernate中做到這一點?

默認情況下,Hibernate不使用動態更新,實際上更新整個對象。 即使對於大型實體,由此產生的開銷也是IMO最小的,您不必擔心它。

通過在class元素上將dynamic-update屬性設置為true ,可以更改此行為:

dynamic-update (可選 - 默認為false ):指定應在運行時生成UPDATE SQL,並且只能包含值已更改的列。

這是注釋等價物(在@org.hibernate.annotations.Entity ,它是JPA的擴展):

dynamicUpdate :允許動態SQL進行更新

但我覺得你太擔心了。 僅在特殊和非常特殊的情況下使用上述內容。

如果您使用最新的hibernate(3.5.5),您可以使用本機sql,如下所示,

session.createSQLQuery(“update table_name set column_1 =:col1”).executeUpdate()。 這種方式不加載或先獲取然后update.just更新為使用sql.Hope幫助你!

暫無
暫無

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

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