Я использую JPA Entity Graphs, чтобы с нетерпением загружать отношения.jpa/hibernate загрузить с нетерпением всю цепочку в auto relashionship
Но моя проблема:
Отношения является авто-отношения, как это:
public class X{
...
@OneToOne
@JoinColumn(name = "foreign_key")
protected @Getter @Setter X parent;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "parent", cascade = {CascadeType.PERSIST, CascadeType.MERGE})
private @Getter @Setter Set<X> children;
}
Так что, когда я получаю объект X из базы данных, дети приходят загружен тоже. Это правильно. Но, когда я получаю первый объект детей Set и получаю своих детей, hibernate выполняет другой запрос в базе данных. Класс
Моей сущности аннотированный с этим:
@NamedEntityGraph(
name = "cobranca-com-lancamentos-com-filhos",
attributeNodes = {
@NamedAttributeNode(value = "children")
}
)
и мой поиск, как это:
em.createQuery("FROM X WHERE id = " + id).setHint("javax.persistence.fetchgraph", em.getEntityGraph("cobranca-com-lancamentos-com-filhos")).getSingleResult();
Любой идея?
Я хочу загрузить с нетерпением только в этом конкретном запросе. Из-за этого я использую JPA Named Entity Graph. Когда я использую дочерние объекты X объекта, спящий режим не проконсультируется с базой данных, как я уже сказал, это строго, я хочу это. Но когда я получаю элемент children Set и перебираю их детей Set, hibernate обращается к базе данных, и это то, чего я не хочу, понимаю? –