我的Spring启动应用程序中有多对多关系。但是当我尝试获取响应时,我总是得到一个空数组;下面是我的类(我粘贴了没有构造函数、getter和setter的代码,但我在代码中有它们):
@Entity
@Table(name="orders")
public class Order {
private @Id
@GeneratedValue
Long id;
@OneToOne(cascade = CascadeType.ALL)
private Customer customer;
@OneToMany(mappedBy = "product",fetch = FetchType.LAZY,cascade = {CascadeType.PERSIST,CascadeType.MERGE,CascadeType.DETACH},orphanRemoval = true)
private Set<ProductOrderDetails> productOrderDetails;
@DateTimeFormat
private Date shippmentDate;
private double totalOrderPrice;
private OrderStatus status;
private String note1;
private String note2;
@Entity
@Table
public class Product {
private @Id
@GeneratedValue
Long id;
private String name;
private String model;
private String color;
private String material;
private double price;
@Transient
private int productQuantity;
@OneToMany(mappedBy = "order",fetch = FetchType.LAZY)
private List<ProductOrderDetails> productOrderDetailsSet;
@Entity
@IdClass(ProductOrderDetails.class)
public class ProductOrderDetails implements Serializable {
@Id
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name="order_id")
Order order;
@Id
@ManyToOne(cascade = {CascadeType.PERSIST,CascadeType.MERGE,CascadeType.DETACH})
@JoinColumn(name="product_id")
Product product;
private int quantity;下面是我的OrderController代码:
@GetMapping("/{id}")
public Order One(@PathVariable Long id) {
Order order=repository.findById(id).orElseThrow(()->new ObjectNotFoundException(id));
return order;
}这是我得到的回应:
{
"id": 2,
"customer": {
"id": 1,
"name": "Company",
"address": "Main Street 1",
"city": "Bern",
"state": "Switzerland",
"zip": 58529,
"contactPersonName": "John Smith",
"contactPersonEmail": "test@gmail.com"
},
"productOrderDetails": [],
"shippmentDate": "2020-12-09T23:00:00.000+00:00",
"totalOrderPrice": 3434.0,
"status": "WAITING",
"note1": "note 1",
"note2": "note 2"
}如何获取productOrderDetails数组(已订购的产品数组)?如果我可以使用JPA,我会更喜欢
发布于 2021-11-28 21:48:45
您有几种方法可以做到这一点:
@Entity
@Table(name="orders")
public class Order {
private @Id
@GeneratedValue
Long id;
@OneToOne(cascade = CascadeType.ALL)
private Customer customer;
@OneToMany(mappedBy = "product",fetch = FetchType.EAGER,cascade = {CascadeType.PERSIST,CascadeType.MERGE,CascadeType.DETACH},orphanRemoval = true)
private Set<ProductOrderDetails> productOrderDetails;
@DateTimeFormat
private Date shippmentDate;
private double totalOrderPrice;
private OrderStatus status;
private String note1;
private String note2;
}在自定义存储库方法中使用联接获取的
@Query(value = "SELECT o FROM Order o JOIN FETCH o.productOrderDetails")
List<Order> findAllOrders();发布于 2021-12-13 23:25:28
所以对于任何和我有同样问题的人来说,我有一个拼写错误,在我应该使用的Order类中:
@OneToMany(mappedBy = "order",fetch = FetchType.LAZY,cascade = {CascadeType.PERSIST,CascadeType.MERGE,CascadeType.DETACH},orphanRemoval = true)
private Set<ProductOrderDetails> productOrderDetails;而不是mappedBy=的“产品”。如果你不想在GET请求时进行递归调用,你应该在ProductOrderDetails类中添加@JsonIgnore:
@Id
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name="order_id")
@JsonIgnore
Order order;代码的其余部分保持不变。
https://stackoverflow.com/questions/70147712
复制相似问题