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

@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 orderDetails。并且OrderDetails具有attr。 Order。因此,当我保存Order对象时,我将获得具有OrderDdrtails attr的Order对象。再次有订单属性。它具有OrderDetail等,如下所示:

[{"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":


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

最佳答案

您可以在Order中用OrderDetails注释@JsonIgnore(如果需要,也可以在Order中注释)。这样,编组后只有孩子会显示在json中。

或者最好使用@JsonManagedReference@JsonBackReference处理关系。有关它的更多信息here。基本上,您必须使用OrderDetails注释@JsonManagedReference的集合,并使用Order注释@JsonBackReference的集合。

07-24 22:08