0

两个实体:Customer, CustomerAddress-CustomerList<CustomerAddress>

public class Customer implements Serializable {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;

    private String name;

    //bi-directional many-to-one association to CustomerAddress
    @OneToMany(mappedBy="customer", fetch=FetchType.EAGER, cascade=CascadeType.ALL)
    private List<CustomerAddress> customeraddresses;

    private String identifier;

    private String aliasId;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(updatable=false)
    private Date createdDateTime;

    // Getters and Setters
}
public class CustomerAddress implements Serializable {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id;

    private String line;

    //bi-directional many-to-one association to Customer
    @ManyToOne
    @JoinColumn(name="customerId")
    private Customer customer;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(updatable=false)
    private Date createdDateTime;

    private String gisLocation;

    // Getters and Setters
}

对应的 DTO:

public class CustomerDTO {
    private int id;
    private String name;
    private String aliasId;
    private List<CustomerAddressDTO> customeraddresses;
    // Getters and Setters
}
public class CustomerAddressDTO {
    private int id;
    private String line;
    // Getters and Setters
}

注意:实体中有未在 DTO 中使用的未使用/额外字段

更新方法的片段:

Customer oldCustomer = customerDao.getCustomerById(dto.getId());
mapper.map(dto, oldCustomer);

现在,在此映射器调用之后,List 中未使用的字段设置为 null(这是不正确的)

确保 Orika 保留嵌套列表中未使用的字段的正确方法是什么?


(如果需要,请提供其他信息):

oldCustomer before mapping: Customer [id=2, name=Customer1, customeraddresses=[CustomerAddress [id=7, line=ABCD**, createdDateTime=Sat Jan 01 00:00:00 IST 2000, gisLocation=1], CustomerAddress [id=13, line=0000, createdDateTime=Mon Jan 01 00:00:00 IST 2001, gisLocation=2]], identifier=id1, aliasId=1234, createdDateTime=Tue Dec 12 00:00:00 IST 2000]
dto used for mapping: CustomerDTO [id=2, name=Customer1, aliasId=1234, customeraddresses=[CustomerAddressDTO [id=7, line=ABCD**], CustomerAddressDTO [id=13, line=0000]]]
oldCustomer after mapping: Customer [id=2, name=Customer1, customeraddresses=[CustomerAddress [id=7, line=ABCD**, createdDateTime=null, gisLocation=null], CustomerAddress [id=13, line=0000, createdDateTime=null, gisLocation=null]], identifier=id1, aliasId=1234, createdDateTime=Tue Dec 12 00:00:00 IST 2000]

(注意:createdDateTimeaandgisLocation设置为 null - 这些应保留原始值)

4

1 回答 1

0

在 Orika 中,这是默认行为,您也可以通过提供合并两个集合的映射器来自定义此行为。该项目的测试代码中有示例。

请检查这个例子:CustomMerge

于 2014-11-15T11:53:02.950 回答