【问题标题】:multiple @OneToMany @ManyToOne bidirectional relationships in one class一个类中有多个@OneToMany @ManyToOne 双向关系
【发布时间】:2019-05-21 10:53:11
【问题描述】:

从具有多个 @OneToMany 关系的类中选择时,我遇到了无限错误,我需要您的帮助来进行映射。

事实上,我收到了关联公司的订单和关联的 lineItems,包括产品,因此 JSON 响应太长而无法显示所有结果。

我尝试过 fetchType.EAGER 并完全删除级联,但它似乎不起作用。

无限错误

at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:727) ~[jackson-databind-2.9.5.jar:2.9.5]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:719) ~[jackson-databind-2.9.5.jar:2.9.5]
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155) ~[jackson-databind-2.9.5.jar:2.9.5]
at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:145) ~[jackson-databind-2.9.5.jar:2.9.5]
at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:107) ~[jackson-databind-2.9.5.jar:2.9.5]
at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:25) ~[jackson-databind-2.9.5.jar:2.9.5]

映射

@Entity
public class Contact implements Serializable{

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name = "id", updatable = false, nullable = false)
    private Long id;
    @ManyToOne
    @JoinColumn(name = "fk_company")
    @JsonBackReference
    private Company company;

}

@Entity
public class Company implements Serializable{

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY)   
    @Column(name = "id", updatable = false, nullable = false)
    private Long id;
    @OneToMany(mappedBy = "company", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
    @JsonManagedReference
    private Set<Contact> contacts = new HashSet<Contact>();
    @OneToMany(mappedBy = "company", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
    @JsonManagedReference
    private Set<Order> orders = new HashSet<Order>();

}



@Entity
public class Order implements Serializable {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name = "id", updatable = false, nullable = false)
    private Long id;
    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    @JoinColumn(name = "fk_order")
    private Set<LineItem> lineItems= new HashSet<LineItem>();
    @ManyToOne
    @JoinColumn(name = "fk_company")
    @JsonBackReference
    private Company company;

}

@Entity
public class LineItem implements Serializable {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name = "id", updatable = false, nullable = false)
    private Long id;
    @ManyToOne
    @JoinColumn(name = "fk_product")
    private Product product;    
    @ManyToOne
    @JoinColumn(name = "fk_order")
    @JsonBackReference
    private Order order; 
}

@Entity
public class Product implements Serializable {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name = "id", updatable = false, nullable = false)   
}

如何在我的映射中解决这个问题,并显示关联公司的所有订单、所有公司以及关联订单和关联产品的所有订单项?

【问题讨论】:

  • 你能添加你的产品类,调用你的实体的代码和完整的堆栈跟踪吗?

标签: java hibernate spring-data-jpa


【解决方案1】:

当实体之间的关系形成循环时,Spring 序列化器将无法生成 json。 尝试在某些字段上引入@JsonIgnore 以停止循环。

【讨论】:

    猜你喜欢
    • 2023-04-09
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 2015-06-06
    • 2011-05-23
    相关资源
    最近更新 更多