Я просто использовал аннотацию dozer v для отображения между классами и DTO. у меня есть некоторые отношения oneToMany и ManyToOne, тогда, когда я пытаюсь получить список клиентов после добавления команды к клиенту, я думаю, что поле команды отображается неправильно в классе клиента, я получаю следующую ошибку:
2020-03-28 16:34:48.507 ERROR 12768 --- [nio-8080-exec-8] org.dozer.MappingProcessor : Field mapping error -->
MapId: null
Type: null
Source parent class: com.mojacko.myProjectdozer.domain.Command
Source field name: customer
Source field type: class com.mojacko.myProjectdozer.domain.Customer
Source field value: com.mojacko.myProjectdozer.domain.Customer@1aa18f29
Dest parent class: com.mojacko.myProjectdozer.dto.CommandDto
Dest field name: customer
Dest field type: com.mojacko.myProjectdozer.dto.CustomerDto
java.lang.IllegalArgumentException: Can not set com.mojacko.myProjectdozer.dto.CustomerDto field com.mojacko.myProjectdozer.dto.CommandDto.customer to com.mojacko.myProjectdozer.dto.CustomerDto
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167) ~[na:1.8.0_151]
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171) ~[na:1.8.0_151]
at sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:81) ~[na:1.8.0_151]
at java.lang.reflect.Field.set(Field.java:764) ~[na:1.8.0_151]
at org.dozer.propertydescriptor.FieldPropertyDescriptor$ChainedPropertyDescriptor.setPropertyValue(FieldPropertyDescriptor.java:143) ~[dozer-5.5.1.jar:na]
at org.dozer.propertydescriptor.FieldPropertyDescriptor.setPropertyValue(FieldPropertyDescriptor.java:90) ~[dozer-5.5.1.jar:na]
at org.dozer.fieldmap.FieldMap.writeDestValue(FieldMap.java:96) ~[dozer-5.5.1.jar:na]
at org.dozer.MappingProcessor.writeDestinationValue(MappingProcessor.java:939) [dozer-5.5.1.jar:na]
at org.dozer.MappingProcessor.mapFromFieldMap(MappingProcessor.java:368) [dozer-5.5.1.jar:na]
at org.dozer.MappingProcessor.mapField(MappingProcessor.java:307) [dozer-5.5.1.jar:na]
at org.dozer.MappingProcessor.map(MappingProcessor.java:267) [dozer-5.5.1.jar:na]
at org.dozer.MappingProcessor.mapToDestObject(MappingProcessor.java:216) [dozer-5.5.1.jar:na]
at org.dozer.MappingProcessor.createByCreationDirectiveAndMap(MappingProcessor.java:196) [dozer-5.5.1.jar:na]
at org.dozer.MappingProcessor.mapCustomObject(MappingProcessor.java:512) [dozer-5.5.1.jar:na]
at org.dozer.MappingProcessor.mapOrRecurseObject(MappingProcessor.java:465) [dozer-5.5.1.jar:na]
at org.dozer.MappingProcessor.addToSet(MappingProcessor.java:757) [dozer-5.5.1.jar:na]
at org.dozer.MappingProcessor.mapCollection(MappingProcessor.java:570) [dozer-5.5.1.jar:na]
at org.dozer.MappingProcessor.mapOrRecurseObject(MappingProcessor.java:453) [dozer-5.5.1.jar:na]
at org.dozer.MappingProcessor.mapFromFieldMap(MappingProcessor.java:361) [dozer-5.5.1.jar:na]
at org.dozer.MappingProcessor.mapField(MappingProcessor.java:307) [dozer-5.5.1.jar:na]
at org.dozer.MappingProcessor.map(MappingProcessor.java:267) [dozer-5.5.1.jar:na]
at org.dozer.MappingProcessor.mapToDestObject(MappingProcessor.java:216) [dozer-5.5.1.jar:na]
at org.dozer.MappingProcessor.createByCreationDirectiveAndMap(MappingProcessor.java:196) [dozer-5.5.1.jar:na]
at org.dozer.MappingProcessor.mapGeneral(MappingProcessor.java:170) [dozer-5.5.1.jar:na]
at org.dozer.MappingProcessor.map(MappingProcessor.java:104) [dozer-5.5.1.jar:na]
at org.dozer.MappingProcessor.map(MappingProcessor.java:99) [dozer-5.5.1.jar:na]
at org.dozer.DozerBeanMapper.map(DozerBeanMapper.java:120) [dozer-5.5.1.jar:na]
at com.mojacko.myProjectdozer.service.dozerMapper.CustomerMapper.mapListObjecttoListObjectDto(CustomerMapper.java:34) [classes/:na]
at com.mojacko.myProjectdozer.service.CustomerServiceImp.findAll(CustomerServiceImp.java:33) [classes/:na]
это часть моего кода: мои классы
@Setter
@Getter
@Entity
@AllArgsConstructor
@NoArgsConstructor
public class Command implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Mapping("commandNumber")
private String commandNumber;
@Mapping("commandName")
private String commandName;
@Mapping("commandType")
private String commandType;
@Mapping("customer")
@ManyToOne
@JoinColumn(name = "customer_id")
private Customer customer;
}
--------------------
@Setter
@Getter
@Entity
@NoArgsConstructor
@AllArgsConstructor
public class Customer implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Mapping("id")
private Long id;
@Mapping("firstName")
private String firstName;
@Mapping("lastName")
private String lastName;
@Mapping("phoneNumber")
private String phoneNumber;
@Mapping("address")
private String address;
@Mapping("commands")
@OneToMany(mappedBy = "customer" ,fetch = FetchType.LAZY)
private Set<Command> commands;
}
классы DTO
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class CommandDto {
private Long id;
private String commandNumber;
private String commandName;
private String commandType;
private CustomerDto customer;
}
--------------------
@Setter
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class CustomerDto {
private Long id;
private String firstName;
private String lastName;
private String phoneNumber;
private String address;
private Set<CommandDto> commands;
}
класс DozerMapper:
@Component
public class CommandMapper {
Mapper mapper = new DozerBeanMapper();
public Command toEntity(CommandDto commandDto) {
return mapper.map(commandDto, Command.class);
}
public CommandDto toDto(Command command) {
return mapper.map(command, CommandDto.class);
}
public List<Command> mapListObjectDTOtoListObject(List<CommandDto> commandDtos) {
List<Command> commands = new ArrayList<>();
for (CommandDto commandDto : commandDtos) {
commands.add(mapper.map(commandDto,Command.class));
}
return commands;
}
public List<CommandDto> mapListObjecttoListObjectDto(List<Command> commands) {
List<CommandDto> commandDtos = new ArrayList<>();
for (Command command : commands) {
commandDtos.add(mapper.map(command,CommandDto.class));
}
return commandDtos;
}
}
------------
@Component
public class CustomerMapper {
Mapper mapper = new DozerBeanMapper();
public Customer toEntity(CustomerDto customerDto) {
return mapper.map(customerDto, Customer.class);
}
public CustomerDto toDto(Customer customer) {
return mapper.map(customer, CustomerDto.class);
}
public List<Customer> mapListObjectDTOtoListObject(List<CustomerDto> customerDtos) {
List<Customer> customers = new ArrayList<>();
for (CustomerDto customerDto : customerDtos) {
customers.add(mapper.map(customerDto,Customer.class));
}
return customers;
}
public List<CustomerDto> mapListObjecttoListObjectDto(List<Customer> customers) {
List<CustomerDto> customersDtos = new ArrayList<>();
for (Customer customer : customers) {
customersDtos.add(mapper.map(customer,CustomerDto.class));
}
return customersDtos;
}
}
Есть идеи?