Sobes.tech
Junior — Middle
108

JPA-да Entity Graph пайдаланып, объектілер арасындағы иерархиялық байланыстарды қалай жүзеге асыруға болады?

Сұралған компаниялар
AstonAston

AI-дан жауап

sobes.tech AI

JPA Entity Graph — негізгі Entity-мен бірге жүктелетін байланысты Entity-лерді анықтау үшін пайдаланылады, сұрауларды оңтайландыруға және N+1 мәселесін болдырмауға көмектеседі.

Иерархиялық байланыстарды Entity Graph көмегімен жүзеге асыру үшін:

  • Атрибуттарды, соның ішінде ішкі байланыстарды subgraph арқылы көрсететін NamedEntityGraph құрыңыз.
  • Subgraph-те екінші деңгейлі және одан әрі байланыстарды көрсетіп, иерархия құрыңыз.

Мысал:

@Entity
@NamedEntityGraph(
    name = "Order.detail",
    attributeNodes = @NamedAttributeNode(value = "items", subgraph = "itemsSubgraph"),
    subgraphs = @NamedSubgraph(
        name = "itemsSubgraph",
        attributeNodes = @NamedAttributeNode("product")
    )
)
public class Order {
    @OneToMany(mappedBy = "order")
    private List<Item> items;
}

@Entity
public class Item {
    @ManyToOne
    private Product product;
}

Сұрау орындағанда, осы графты көрсетіңіз:

EntityGraph<?> graph = em.getEntityGraph("Order.detail");
Map<String, Object> props = new HashMap<>();
props.put("javax.persistence.fetchgraph", graph);
Order order = em.find(Order.class, orderId, props);

Осылайша, Order, оның item-тері және оларға байланысты product-тар иерархиялық түрде жүктеледі.