[英]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.