Получение нулей при использовании ModelMapper - PullRequest
0 голосов
/ 07 августа 2020

Я пытаюсь использовать 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

1 Ответ

1 голос
/ 08 августа 2020

Попробуйте:

modelMapper.getConfiguration().setPropertyCondition(Conditions.isNotNull());

Также проверьте: Modelmapper: как применить настраиваемое сопоставление, когда исходный объект равен нулю?

...