目标
我的目标是将UI对象从表示层合并到持久层的持久对象。 (使用JDO进行DetachCopy和更新)
详细
想要将UIObject合并到Persistence对象而不会丢失持久性对象的其他状态。我用Orika测试了用例。它成功合并了外部对象,但是对于内部对象,它创建了新对象。所以我失去了持久化对象的持久性状态,实际上是由持久层设置的。
复杂性
外部FXUser对象包含一个内部对象ChildMetaData。 ChildMetaData对象包含外部FXUser对象的列表。在任何级别,对象都存在,需要合并其他需要添加。如果源内部列表没有对象,则需要将其从desitination中删除。 Equals和Hash代码被唯一值覆盖。
MapperFactory factory = new DefaultMapperFactory.Builder().build();
BoundMapperFacade<FXUserTO, FXUserVO> mapper =
factory.getMapperFacade(FXUserTO.class, FXUserVO.class);
mapper.map(sourceFxTO, destinationFxVO);
我的对象结构在下面给出了
我的对象结构
持久性对象
public class FXUserVO implements TalosVO {
private int userId;
private ChildMetaDataVO childMetaData;
.......other fields
..... getters and setters
@Override
public int hashCode(){
final int prime = 31;
int result = 1;
result = prime * result + userId;
return result;
}
@覆盖 public boolean equals(Object obj){
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
FXUserVO other = (FXUserVO) obj;
if (userId != other.userId)
return false;
return true;
}
}
public class ChildMetaDataVO implements TalosVO {
private List<FXUserVO> childUsers;
.......other fields
..... getters and setters
}
对应的UI对象
public class FXUserTO implements TalosTO {
private int userId;
private ChildMetaDataTO childMetaData;
.......other fields
..... getters and setters
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + userId;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
FXUserTO other = (FXUserTO) obj;
if (userId != other.userId)
return false;
return true;
}
}
public class ChildMetaDataTO implements TalosTO {
private List<FXUserTO> childUsers;
.......other fields
..... getters and setters
}