簡體   English   中英

Hibernate:Doman Model to JPA Entity / DTO&Merge()設計模式或最佳實踐

[英]Hibernate: Doman Model to JPA Entity/DTO & Merge() Design pattern or best practice

使用merge()的推薦方法是在輸入更改之前首先獲取DTO。

public void merge(PersonModel model) {

Person inputDTO = PersonBuilder.build(model)

Person dto = get(pk)
dto.setName(inputDTO.getName())

dto.getChildren().clear()

Iterator<Child> iter = inputDTO .getChildren().Iterator();

while(iter.hasNext()){
   dto.getChildren().add(iter.next());
}

dto.merge();

}

是否有更優雅的方式執行此類操作將域模型轉換為dto並將其合並,以便不會意外刪除任何數據。

問題示例: Hibernate:使用merge()時阻止刪除orphan;

我發現需要清除列表並添加它非常浪費。

有人可以推薦我一個設計模式或正確編碼的方法嗎?

謝謝

添加在:

1)可以使用Hibernate Hashset替換List嗎? hibernate hashset會替換基於主鍵的元素嗎?

任何幫助?

“使用merge()的推薦方法是在輸入更改之前首先獲取DTO”

誰建議你這樣做?

“是否有一種更優雅的方式來執行此類操作,將域模型轉換為dto並將其合並,以便不會意外刪除任何數據。”

我認為您不能將域對象轉換為DTO。 DTO只是數據,域對象是數據,行為和上下文。 完全不同。

如果您的域對象( 也稱為貧血域模型 )中沒有行為和上下文,則不需要額外的DTO層來復制對象。

因為你用Hibernate標記了這個問題,並在你的問題中提到它,你不需要自己調用merge,因為你剛從數據庫中獲取了對象,而Hibernate將刷新會話以使更改與數據庫同步。

“可以使用Hibernate Hashset替換List嗎?hibernate hashset會基於主鍵替換元素嗎?”

我會用一個Hashset替換List,因為要存儲數據的表是一個集合,而不是一個列表(你不能有重復的記錄)。 哈希集不會替換基於主鍵的元素。 一個集合(任何集合,Hibernate的實現都沒有區別)通過防止重復來工作。 它使用你的equals()和getHashCode()實現來查明該集合中是否已有對象。 如果是這種情況,它將不會被添加,但保留原始版本。

暫無
暫無

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

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