Junior — Middle
108
JPA-да Entity Graph пайдаланып, объектілер арасындағы иерархиялық байланыстарды қалай жүзеге асыруға болады?
Сұралған компаниялар
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-тар иерархиялық түрде жүктеледі.