两个实体:Customer
,CustomerAddress
- Customer
有List<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中使用
来自Update方法的Snippet:
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]
(注意:createdDateTime
a和gisLocation
设置为null - 这些应保留原始值)