关于java:使用hibernate的一对多和一对一关系

One to many and one to one relationship using hibernate

我有 Order 类和 OrderDetails 如下所示。现在我在 order 和 orderdetails 之间有 one to many 关系,而 one to one 在其他方向。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@Entity
@Table(name ="orders")
@EntityListeners(AuditingEntityListener.class)
@JsonIgnoreProperties(value = {"createdAt" }, allowGetters = true)
public class Order implements Serializable {

    @JsonView(View.V1.class)
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long orderNo;

    //@NotBlank
    //private String orderNo;

    @JsonView(View.V1.class)
    @Column(nullable = false, updatable = false)
    @Temporal(TemporalType.TIMESTAMP)
    @CreatedDate
    private Date createdAt;

    //@OneToOne(cascade = CascadeType.MERGE)
    //@PrimaryKeyJoinColumn
    //@OneToMany(cascade=CascadeType.ALL, fetch = FetchType.LAZY)
    //@JoinColumn(name="id")
    @JsonView(View.V1.class)
    @OneToMany(mappedBy="order")
    private Set<OrderDetails> orderDetails;

    @JsonView(View.V1.class)
    @Email(message="Email should be valid")
    private String email;
}

可以看出 Order 有 atrr。 set of orderDetailsOrderDetails 有一个属性。 Order。因此,当我保存 Order 对象时,我得到了具有 OrderDdrtails 属性的 Order 对象。再次具有 Order attr。其中有 OrderDetail 等如下所示:

1
[{"orderNo":1,"createdAt":"2019-04-16T16:26:02.000+0000","orderDetails":[{"id":1,"itemId":1,"quantityOrdered":50,"order":{"orderNo":1,"createdAt":"2019-04-16T16:26:02.000+0000","orderDetails":

我可以做的一件事是将OrderDetails 中的Order 设置为null。但是我可以使用其他方法吗?


您可以在 OrderDetails 中用 @JsonIgnore 注释 Order (如果您愿意,也可以在 Order 中)。这样,编组后只有子级将显示在 json 中。

或者更好地使用 @JsonManagedReference@JsonBackReference 来处理关系。更多关于它在这里。基本上,您必须用 @JsonManagedReferenceOrder@JsonBackReference.

注释一组 OrderDetails