Я создал 4 класса для 3 таблиц. Эти таблицы созданы для хранения заказов с продуктами.
Моя первая сущность - это заказы:
@Entity
@Table(name="orders")
public class OrderEntity implements Serializable {
...
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
private UserEntity seller;
private String paymentMode;
private double totalAmount;
@OneToMany(mappedBy = "pk.order")
private List<OrderProductEntity> orderProducts;
@DateTimeFormat
private Date createdAt;
...
}
Моя вторая сущность - продукты:
@Entity
@Table(name="products")
@Getter @Setter
public class ProductEntity implements Serializable {
...
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String productKeyId;
@ManyToOne
@JoinColumn(name = "category_id")
private CategoryEntity category;
@Column(nullable = false)
private String name;
@Column(nullable = false)
private double price;
@Column(nullable = false)
private int availableQty;
@JsonManagedReference
@OneToMany(mappedBy = "pk.product", fetch = FetchType.EAGER)
@Valid
private List<OrderProductEntity> orderProducts;
...
}
Я также определяю сводную таблицу в OrderProductEntity:
@Entity
@Table(name="order_product")
@Getter @Setter
public class OrderProductEntity {
@EmbeddedId
@JsonIgnore
private OrderProductPK pk;
@Column(nullable = false)
private Integer quantity;
// default constructor
public OrderProductEntity(){}
public OrderProductEntity(OrderEntity order, ProductEntity product, Integer quantity) {
pk = new OrderProductPK();
pk.setOrder(order);
pk.setProduct(product);
this.quantity = quantity;
}
}
И я определил PK этой таблицы:
@Embeddable
@Getter @Setter
public class OrderProductPK implements Serializable {
@JsonBackReference
@ManyToOne(optional = false, fetch = FetchType.LAZY)
@JoinColumn(name = "order_id")
private OrderEntity order;
@ManyToOne(optional = false, fetch = FetchType.LAZY)
@JoinColumn(name = "product_id")
private ProductEntity product;
}
Теперь моя задача - вернуть данные во фронт-офис с помощью веб-сервиса Rest. Я создал модель, которая представляет то, что я хочу получить в результате.
public class OrderRest {
private String orderKeyId;
private String paymentMode;
private double totalAmount;
private List<ProductRest> orderProducts;
private UserRest seller;
private Date createdAt;
}
И:
public class ProductRest {
private String productKeyId;
private String name;
private double price;
private int qty;
private String imgPath;
private CategoryRest category;
}
В моем контроллере я хочу вернуть объект OrderRest:
public List<OrderRest> getOrders() {
List<OrderRest> returnValue = new ArrayList<>();
List<OrderDto> orderDtos = orderService.getOrders();
// loop the result
for (OrderDto orderDto : orderDtos) {
OrderRest orderRest = new OrderRest();
ModelMapper modelMapper = new ModelMapper();
orderRest = modelMapper.map(orderDto, OrderRest.class);
returnValue.add(orderRest);
}
return returnValue;
}
Этот метод отображает список OrderRest и вызываетуровень обслуживания:
public List<OrderDto> getOrders() {
List<OrderDto> returnValue = new ArrayList<>();
Iterable<OrderEntity> orderEntities = orderRepository.findAll();
ModelMapper modelMapper = new ModelMapper();
for(OrderEntity orderEntity: orderEntities) {
OrderDto orderDto = new OrderDto();
UserDto userDto = orderDto.getSeller();
List<OrderProductDto> orderProductDtos = orderDto.getOrderProducts();
orderDto = modelMapper.map(orderEntity, OrderDto.class);
returnValue.add(orderDto);
}
return returnValue;
}
С OrderDto:
public class OrderDto implements Serializable {
@Getter(AccessLevel.NONE)
@Setter(AccessLevel.NONE)
private static final long serialVersionUID = 1L;
private Long id;
private String orderKeyId;
private String paymentMode;
private double totalAmount;
private List<OrderProductDto> orderProducts;
private UserDto seller;
private Date createdAt;
}
И OrderProductDto:
public class OrderProductDto implements Serializable {
@Getter(AccessLevel.NONE)
@Setter(AccessLevel.NONE)
private static final long serialVersionUID = 1L;
private String productKeyId;
private String name;
private Integer price;
private Integer qty;
private String imgPath;
private CategoryDto category;
}
Моя проблема связана с тем, что я возвращаю из API REST: мой продуктсписок ничего не возвращает:
"orderProducts": [
{
"productKeyId": null,
"name": null,
"price": 0.0,
"qty": 0,
"imgPath": null,
"category": null
},...
]