множественные двунаправленные отношения @OneToMany @ManyToOne в одном классе - PullRequest
0 голосов
/ 21 декабря 2018

Я получаю бесконечную ошибку при выборе из класса, который имеет несколько отношений @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)   
}

Как я могу исправить это в моем отображении и показать все заказы со связанной компанией, всеми компаниями и всемиlineItems со связанным заказом и связанным продуктом?

1 Ответ

0 голосов
/ 21 декабря 2018

Когда отношения между сущностями образуют цикл, у Spring сериализатора возникнет проблема с генерацией json.Попробуйте ввести @JsonIgnore в некоторые поля, чтобы остановить цикл.

...