两个实体: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 中使用的未使用/额外字段
更新方法的片段:
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
aandgisLocation
设置为 null - 这些应保留原始值)