Как бороться с MultipleBagFetchException в JPA в отношении множественных одно- или многозначных отношений в JPA? - PullRequest
0 голосов
/ 27 апреля 2020

У меня следующий код

public class Product extends AbstractEntity<Long> {
    ...
    @ManyToMany(targetEntity = Category.class, fetch = FetchType.EAGER)
    @JoinTable(name = "product_categories", joinColumns = @JoinColumn(name = "product_id"),
            inverseJoinColumns = @JoinColumn(name = "category_id"))
    private List<Category> categories;

    @OneToMany(targetEntity = ProductImage.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "product_id", referencedColumnName = "id")
    private List<ProductImage> images;
    ...
}

Как мы видим, было два отношения, и это показывает ошибку MultipleBagFetchException. Один из них должен быть удален.

Изначально я привык к Laravel framework и newb ie к springboot. У меня есть вопросы по поводу отношений в Springboot JPA -

  1. Есть ли способ определить отношения в сущности класса и загружать их только при необходимости? Например, приведенный выше код - не загружайте никакие реляционные данные в список API, но загружайте все реляционные данные (бренд, категории, изображения) в подробном API продукта.

  2. Отдельно SQL запрос для каждого отношения вместо объединения - я думаю, что объединение нескольких отношений имеет декартово произведение, чтобы объединить несколько реляционных результатов, что было бы слишком дорого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...