Вы можете создать граф сущностей и извлекать граф всякий раз, когда вам нужно срочно извлечь ассоциации.
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