使用 Dozer 映射值对象

nih*_*t84 5 java mapping dozer

我正在使用 Dozer 将我的 DTO 映射到 JPA 实体。

其中一个用例是一个已经存在的实体的DTO表示到达一个WS,然后我使用JPA找到实体,并使用推土机的DTO映射使用中发现实体地图(源,目的地)的映射方式(不是map(source, destinationClass))。

我的实体(例如地址)上有一些值对象(具有经典的不可变值对象语义)作为 @Embeddables。问题是,我希望推土机在将其设置为例如:Employee 对象时始终创建一个新的Address 实例,而不是映射到已经存在的 Address 实例。

因此,对于以下课程:

public class Employee {

    private Address address;

    public void setAddress(Address address) {
        this.address = address;
    }

    public Address getAddress() {
        return this.address;
    }

}
Run Code Online (Sandbox Code Playgroud)

我希望推土机总是使用新的地址实例调用 setAddress(),而不是尝试使用 getAddress() 映射新地址的字段。

有没有办法做到这一点?

Tne*_*nem 3

我认为你可以使用自定义转换器来做到这一点。请参阅推土机文档中有关自定义转换器的部分。