2014-03-05 55 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 下:“累计对非累积目录映射(双向)

祝你好运!