簡體   English   中英

無需主鍵即可休眠保存或更新對象

[英]hibernate save or update object without primary key

假設我有一個名為Player的類,該類與hibernate保持一致,並且具有生成的ID和復合的自然ID。 Player是一個復雜的類,用於存儲也已生成ID的其他對象的層次結構。

我可以查詢json網絡服務以獲取Player的實例。 傑克遜(Jackson)對json進行了解析,傑克遜(Jackson)構建了一個完整的Player對象,但它不會包含任何生成的ID。 我本質上想在此播放器實例上執行saveOrUpdate。

一種選擇是通過自然ID在數據庫中查詢Player對象。 如果沒有返回對象,請保存。 否則,請手動將Web服務中Player對象的所有值(及其所有字段)復制到數據庫中的對象,然后進行更新。 我不喜歡此選項,因為它似乎效率低下,並且會包含很多額外的代碼。

我想做的只是將生成的ID從數據庫對象復制到Web服務的對象,然后對此進行更新。 不幸的是,我無法完成這項工作。 我以為可以使用merge()來解決問題,但是我得到了這個異常:

org.hibernate.HibernateException:找到多個具有給定標識符的行

處理這種情況的最佳方法是什么?

請問您為什么不讓傑克遜將生成的ID(我認為是PK)傳遞給客戶端? 如果這樣做,則可以保存或更新以持久保存Player對象。

我通過確保傑克遜在反序列化/序列化時幾乎只使用PK(實際上是PK和名稱,因此可以創建鏈接),使用@來處理與其他對象(不應使用相同方法處理的實體和集合)之間的關系。 JsonSerialize。

這與Hibernate兼容-即使我的實體引用了其他實體/集合,我也可以簡單地執行CRUD操作,而無需DTO,轉換或額外的數據庫訪問。

br,詹斯

暫無
暫無

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

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