Я пытаюсь использовать ModelMapper
в процессе преобразования. Что мне нужно сделать, так это преобразовать сущность Sample
в объект SampleDTO
.
У меня есть сущность Sample
, как показано ниже:
@Entity
@Table(name = "sample", schema = "sample_schema")
@Data
@NoArgsConstructor
public class Sample {
private static final String SEQUENCE = "SAMPLE_SEQUENCE";
@Id
@SequenceGenerator(sequenceName = SEQUENCE, name = SEQUENCE, allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = SEQUENCE)
private Long id;
@Column(name = "name")
private String name;
@Column
private String surname;
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "id_deetails")
private Details details;
}
Которая содержит Details
one:
@Entity
@Table(name = "details", schema = "sample_schema")
@Data
@NoArgsConstructor
public class Details {
private static final String SEQUENCE = "DETAILS_SEQUENCE";
@Id
@SequenceGenerator(sequenceName = SEQUENCE, name = SEQUENCE, allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = SEQUENCE)
private Long id;
@Column(name = "street_name")
private String streetName;
@Column
private String city;
}
Я бы хотел, чтобы DTO был в таком формате:
@NoArgsConstructor
@AllArgsConstructor
@Data
public class SampleDTO {
private Long id;
private String name;
private String surname;
private String streetName;
private String city;
}
Я также сделал bean-компонент ModelMapper, например:
@Bean
public ModelMapper modelMapper() {
return new ModelMapper();
}
И Я сделал компонент преобразователя:
@Component
public class EntityDtoConverter {
private final ModelMapper modelMapper;
@Autowired
public EntityDtoConverter(ModelMapper modelMapper) {
this.modelMapper = modelMapper;
}
public SampleDTO sampleToDto(Sample entity) {
return modelMapper.map(entity, SampleDTO.class);
}
}
Проблема в
, когда я пытаюсь использовать этот преобразователь сопоставления в своей службе
@Service
public class SampleService {
private final SampleRepository sampleRepository;
private final EntityDtoConverter entityDtoConverter;
@Autowired
public SampleService(SampleRepository sampleRepository, EntityDtoConverter entityDtoConverter) {
this.sampleRepository = sampleRepository;
this.entityDtoConverter = entityDtoConverter;
}
public List<SampleDTO> getSamples() {
List<SampleDTO> samples = sampleRepository.findAll()
.map(entityDtoConverter::sampleToDto);
return new List<SampleDTO>(samplesPage);
}
}
Я получаю нули в местах Details
полей.
Я следил за учебником Baeldung о преобразовании модели в dto с помощью ModelMapper, а также документацией этого но малейшее не помогло. Мне чего-то не хватает, и я понятия не имею, что это.
Я работаю:
- Java 11
- Spring Boot 2.3 .0
- ModelMapper 2.3.8