#java #modelmapper
#java #modelmapper
Вопрос:
Я хочу знать, возможно ли сопоставить DTO с классом объектов с составным pk. Я читал документацию ModelMapper о PropertyMap, но я не могу заставить ее работать.
Вот код:
PlanDTO:
public class PlanDTO implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String name;
private String formula;
private String frequency;
private String pricingtable;
// getters and setters omitted
ПланИд:
@Embeddable
public class PlanId implements Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String name;
public BillingPlanId() { }
public PlanId(Long id, String name) {
this.id = id;
this.name = name;
}
// getters and setters omitted
}
План:
@Entity
@Table(name = "plan")
public class Plan implements Serializable {
private static final long serialVersionUID = 1L;
@EmbeddedId
private PlanId id;
@Column(name = "formula")
private String formula;
@Column(name = "frequency")
private String frequency;
@Column(name = "pricingtable")
private String pricingTable;
public Plan() { }
//setters and getters omitted
}
Вот конфигурация ModelMapper.
@Bean
public ModelMapper modelMapper() {
ModelMapper modelMapper = new ModelMapper();
modelMapper.getConfiguration().setAmbiguityIgnored(true);
PropertyMap<PlanDTO, Plan> itemMap1 = new PropertyMap<PlanDTO, Plan>() {
protected void configure() {
map().setFormula(source.getFormula());
map().setFrequency(source.getFrequency());
map().setId(new Plan(source.getId(), source.getName()));
map().setPricingTable(source.getPricingtable());
}
};
modelMapper.addMappings(itemMap1);
}
Но это происходит во время выполнения debug image
Что-то не так с конфигурацией? Я что-то пропустил?
Ответ №1:
Я не совсем уверен, в чем ваша проблема, но сопоставление должно быть довольно простым с помощью только одного сопоставления свойств:
modelMapper.addMappings(new PropertyMap<PlanDTO, Plan>() {
@Override
protected void configure() {
map().getId().setName(source.getName());
}
});
Все остальные поля должны быть неявно сопоставлены по их имени. Даже PlanId.id
.