Значения полей DTO равны null. Почему?
Пишу MVC-приложение(интернет-магазин) со Spring-Boot, Hibernate. Для конвертации классов в DTO и наоборот использую Mapstruct. У меня есть класс Drink, от которого наследуются классы Tea и Coffee. Соответственно, я создал по той же иерархии и DTO-классы. Добавил мапперы через Mapstruct и вроде все замапилось. Но когда вывожу все drinks через jpa-репозитории findAll, у меня поля класса TeaDTO и CoffeeDTO выдаются с null, хотя поля унаследованные от DrinkDTO выводятся с корректными значениями из БД. Почему так происходит и как это исправить?
Класс Drink:
@Data
@Entity
@NoArgsConstructor
@Table(name = "drink")
@Inheritance(strategy = InheritanceType.JOINED)
public class Drink {
// Fields
//
@Id
@GeneratedValue
private Long id;
/** Название напитка */
private String name;
/** Цена напитка */
private BigDecimal price;
/** Описание напитка */
private String about;
/** Флаг удаления */
@Column(name = "is_deleted")
private boolean isDeleted;
// Relationships
//
/** Упаковка напитка */
@ManyToOne
@JoinColumn(name = "packaging_id")
private Packaging packaging;
/** Производитель */
@ManyToOne
@JoinColumn(name = "manufacturer_id")
private Manufacturer manufacturer;
/** Страна производитель */
@ManyToOne
@JoinColumn(name = "country_id")
private Country country;
}
Класс Tea(для примера, класс кофе не буду кидать):
@Entity
@Table(name = "tea")
public class Tea extends Drink {
// Relationships
//
/** Тип чая */
@ManyToOne
@JoinColumn(name = "type_id")
private TeaType teaType;
/** Цвет чая */
@ManyToOne
@JoinColumn(name = "color_id")
private TeaColor teaColor;
}
Класс DrinkDTO:
@Data
public class DrinkDTO {
// Fields
//
protected Long id;
protected String name;
protected float price;
protected String about;
protected GeneralCatalogDTO packaging;
protected GeneralCatalogDTO manufacturer;
protected GeneralCatalogDTO country;
}
Класс TeaDTO:
@EqualsAndHashCode(callSuper = true)
@Data
public class TeaDTO extends DrinkDTO {
private TeaType teaType;
private TeaColor teaColor;
}
Mapstruct mapper:
@Mapper(componentModel = "spring")
public interface TeaMapper {
TeaMapper INSTANCE = Mappers.getMapper(TeaMapper.class);
TeaDTO teaToTeaDTO(Tea tea);
Tea teaDTOtoTea(TeaDTO teaDTO);
@IterableMapping(qualifiedByName = "teaToTeaDTO")
default Page<TeaDTO> teaToTeasDTO(Page<Tea> teas) {
return teas.map(this::teaToTeaDTO);
}
}
Service:
public PageDTO<TeaDTO> findAll(int page, int pageSize) {
// По дефолту он сортирует список по возрастанию цены
PageRequest pageRequest = PageRequest.of(page, pageSize, Sort.by("price").ascending());
final Page<Tea> teas = teaRepository.findAll(pageRequest);
return new PageDTO<>(teaMapper.teaToTeasDTO(teas));
}
Хотя когда debug, то в выводе показывает, что все ок:

