Как загрузить множественный набор ленивых в одном hql по bibernate - PullRequest
0 голосов
/ 24 апреля 2020

Я работаю над проектом web spring + hibernate У меня проблема с загрузочным набором

У меня есть java класс Entity

@Entity
public class Product 
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @ManyToMany(cascade= CascadeType.ALL)
    @JoinTable(
            joinColumns = @JoinColumn( name="parent_id"),
            inverseJoinColumns = @JoinColumn( name="id"))
    private Set<Product> gifts;

@ManyToMany(cascade= CascadeType.ALL)
    @JoinTable(
            joinColumns = @JoinColumn( name="parent_id"),
            inverseJoinColumns = @JoinColumn( name="id"))
    private Set<Product> suggestion;

@ManyToMany(cascade= CascadeType.ALL)
    @JoinTable(
            joinColumns = @JoinColumn( name="parent_id"),
            inverseJoinColumns = @JoinColumn( name="id"))
    Private Set<Product> relative;
}

подарки, предложения и относительный набор = ленивый и я не хочу рваться

Теперь я хочу загрузить подарки, предложения и относительный продукт в одном запросе гибернации заявления

что лучшее предложение для моей идеи

i не могу изменить исходный код, я хочу найти способ загрузки заданных объектов при загрузке продукта

1 Ответ

0 голосов
/ 25 апреля 2020

Вы можете создать граф сущностей и извлекать граф всякий раз, когда вам нужно срочно извлечь ассоциации.

1.Первое объявление графа сущности над сущностью Продукт.

@Entity
@NamedEntityGraph(name = "products",
attributeNodes = {@NamedAttributeNode("gifts"),
  @NamedAttributeNode("suggestion"),
  @NamedAttributeNode("relative")})
public class Product
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(name = "name")
    private String name;

    @ManyToMany(cascade= CascadeType.ALL)
    @JoinTable(
            joinColumns = @JoinColumn( name="parent_id"),
            inverseJoinColumns = @JoinColumn( name="id"))
    private java.util.Set<Product> gifts;

    @ManyToMany(cascade= CascadeType.ALL)
    @JoinTable(
            joinColumns = @JoinColumn( name="parent_id"),
            inverseJoinColumns = @JoinColumn( name="id"))
    private Set<Product> suggestion;

    @ManyToMany(cascade= CascadeType.ALL)
    @JoinTable(
            joinColumns = @JoinColumn( name="parent_id"),
            inverseJoinColumns = @JoinColumn( name="id"))
    private Set<Product> relative;
}

2. Затем прикрепите график к одному из методов репозитория.

public interface ProductRepository extends JpaRepository<Product, Integer> {
        @EntityGraph(value = "products")
        Optional<Product> findById(Integer id);
    }

ПРИМЕЧАНИЕ: все ассоциации, которые вы объявляете в узлах атрибутов EntityGraph, будут загружены с нетерпением, а те сопоставления в Product, которые не являются узлами атрибутов, будут по-прежнему выбираться лениво.

Считать разницу между типом LOAD и FETCH: LOAD против FETCH

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