[英]What is the best way to safely update hibernate entity?
首先解釋一下上下文。 我有可以通過JMS訪問的后端Java(Spring / Hibernate)應用程序。 我有可通過網址訪問的客戶端應用(RESTfull)。 我有一個復雜的實體,其中有多個列表(大多數是惰性的),並且這個實體是xy其他實體的組成。
問題:因為我通過URL訪問它,所以我在URL地址參數的客戶端應用程序中創建Java對象。 我通過JMS將其發送到后端,但是在后端,我沒有Hibernate對象,因此無法簡單地合並它。
我可以瀏覽所有來自客戶的信息,例如:
並針對每個合成實體重復此操作,但我想知道是否存在更優雅且“易於維護”的方式來通過所有更改來更新此實體。
我希望我能解釋清楚。 提前致謝!
從您的描述看來,您遵循的步驟是正確的。 第一步(獲取對象)和最后一步(更新對象)是不可避免的。 唯一可以優化的地方是檢查/設置部分。 為此,您可以編寫一個通用方法,該方法接受兩個對象並使用Reflection比較它們的更改。 這樣,它可以再次重用。
這是使用反射的示例代碼 。 根據您的需要進行更改
如果您確信已擁有修改后的實體字段的最新值(例如,通過保留樂觀鎖定版本字段)和/或打算覆蓋所有修改后的字段,則無需檢查這些字段是否為改變與否。 只需找到實體並設置您擁有的字段(包括ID和版本),Hibernate就會將對數據庫的更改(如果有的話)覆蓋到數據庫,除非在此期間某個實體已被其他線程修改。 在這種情況下,由於樂觀鎖異常,更新/合並失敗。
因此,步驟將變為:
當然,您需要確保您的實體關系上具有適當的級聯,或者對於每個相關的實體一個一個地更新實體。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.