2014-03-05 28 views
1

我試圖將A-DTO對象映射到A-DO對象,每個對象分別具有T-DTO和T-DO的集合(列表)。我正在嘗試在REST API的上下文中執行此操作。這是一個單獨的問題,它是否是一個正確的方法 - 我正在解決的問題是更新的情況。基本上,如果A-DTO中的一個T-DTO發生變化,我希望將該變化映射到A-DO內的相應T-DO。推土機映射/更新集合

我在推土機文檔中找到了relationship-type="non-cumulative",以便集合中的對象被更新(如果存在)。但是最終Dozer在A-DO的系列中插入了一個新的T-DO!

注:我沒有實現equals!它僅基於現在的主鍵。

任何想法? PS:如果你認爲這是一個不好的想法來處理一對多依賴實體的更新,請隨時指出......我不是100%確定我喜歡那種方法,但是,我的REST foo不是很強大。

UPDATE

equals實現:

@Override 
public boolean equals(Object obj) { 
    if (obj instanceof MyDOClass) { 
     MyDOClass other = (MyDOClass) obj; 
     return other.getId().equals(this.getId()); 
    } 
    return false; 
} 
+0

你完全確定你的'equals'和'hashcode'(如果適用)實現是正確的嗎?你不插入一個新的對象?你會介意發佈你的'等於'和什麼更新在兩個對象? – sakura

+0

感謝您的建議;我認爲「平等」是好的......我已經將它添加到了問題中。至於什麼更新 - 只有一個浮動字段。 – alexakarpov

回答

3

我只是有同樣的問題,我解決了它:

推土機使用contains,以確定是否一個成員,是一家集內。
您應該執行hashCode以便"contains"可以正常工作。

您可以在下面的文檔頁面看到這一點: http://dozer.sourceforge.net/documentation/collectionandarraymapping.html 下:「累計對非累積目錄映射(雙向)

祝你好運!