我有一个 Order
实体和 OrderProduct
. 我想显示在前端的订单细节,当然订购产品在它。那么如何从中获取产品对象呢 OrderProduct
json。产品数组中缺少产品对象。我再也不需要order对象了,我认为它将是一个无限递归的东西
我的 Order
实体:
@Entity
@Getter
@Setter
@Table(name ="orders")
public class Order{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long id;
private BigDecimal totalPrice;
@OneToMany(mappedBy = "order", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JsonManagedReference(value="orders")
private List<OrderProduct> products = new ArrayList<>();
private int userId;
@DateTimeFormat(pattern="dd/MM/yyyy")
private Date date = new Date();
@DateTimeFormat(pattern="dd/MM/yyyy")
private Date deliveryDate;
@Enumerated(EnumType.STRING)
private OrderType orderType;
}
我的 OrderProduct
实体:
@Entity
@Setter
@Getter
public class OrderProduct {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.EAGER)
@JsonBackReference(value="product")
@JoinColumn(name = "product_id")
private Product product;
@ManyToOne
@JsonBackReference(value="orders")
@JoinColumn(name = "order_id")
private Order order;
private Integer quantity;
}
产品实体:
@Entity
@Getter
@Setter
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true)
private String name;
private double price;
@OneToMany(mappedBy = "product", cascade = CascadeType.ALL)
@JsonManagedReference(value="ingredients")
private List<Ingredient> ingredients = new ArrayList<>();
@OneToMany(mappedBy = "product",fetch = FetchType.EAGER)
@JsonManagedReference(value="product")
private List<OrderProduct> products = new ArrayList<>();
private String fileName;
}
3条答案
按热度按时间wqlqzqxt1#
这可以由我的图书馆beanknife来完成
将生成以下类:
然后
可能的问题:
我没有使用lombok,所以可能需要对lombok进行调整,因为它可以动态地更改字节码。但这不是一个大问题,如果有人提出这个问题并提供足够的用例,我会尝试调整它。
生成的类不会继承原始类上的注解。在下一个版本中,我将提供一个sulotion。此时,作为一种解决方法,我们可以使用自定义方法手动转换属性。例如
生成的类将更改为
更新版本1.2.0已发布。添加对注解继承的支持。
生成
noj0wjuj2#
这有助于用
每次json序列化进入循环时,对象数据都将替换为对象id或其他实体字段,供您选择。
wwodge7n3#
你可以用
@JsonView
注解来定义需要序列化为json的字段工作原理:
你需要用接口定义类。例如:
将实体字段标记为
@JsonView(<some interface.class>)
```public class User {
}
万一
@JsonView(SomeView.id.class)
您将得到以下json:万一
@JsonView(SomeView.CoreData.class)
:万一
@JsonView(SomeView.FullData.class)
:@OneToMany(mappedBy = "product",fetch = FetchType.EAGER)
@JsonManagedReference(value="product")
private List products = new ArrayList<>();