Spring JPA / Hibernate Performance Загрузка для вложенных коллекцийJAVA

Программисты JAVA общаются здесь
Anonymous
Spring JPA / Hibernate Performance Загрузка для вложенных коллекций

Сообщение Anonymous »

Ради простоты, рассмотрите следующие объекты и предположим, что они правильно объявлены как < /p>
Вот мои сущности < /p>
class EntityA {

private String id;

@OneToMany
List entityBList;

@OneToMany
List entityCList;
}

class EntityB {
private String idB;

@ManyToOne
EntityA entityA;
}

class EntityC {

private String idC;

@OneToMany
List entityDList;

@ManyToOne
EntityA entityA;
}

class EntityD {

private String idD;

@ManyToOne
private EntityC entityC;
}

Обратите внимание на то, что выше имеется вложенные коллекции
Предположим, что я хочу получить 1000 Entitya (в комплекте со всеми коллекциями и коллекциями ее детей, и я хотел, чтобы они уже были загружены, когда я делаю, скажем, репо. будет < /p>
EntityA будет иметь список как EntityB , так и Entityc , но я также хотел, чтобы список EntityD уже загружен в EntityC
в основном выполнение только некоторых запросов в создании результатов (включая коллекции и вложенные сборы) в начале, и когда они будут выполнены, которые не будут выполнены, что не будет выполнено. Db
Вот что я знаю в настоящее время,

смог сделать EntityGraph Однако я не могу загрузить вложенную коллекцию Entityd в Entityc , все еще приведен в n+1, Subgry -subgry -subgre, что -то вроде Определение ниже, называемое их в 2 отдельный репозитный вызов.@NamedEntityGraph(
name = "EntityAPlusEntityB",
attributeNodes = {
@NamedAttributeNode("entityBList")
}
)
@NamedEntityGraph(
name = "EntityAPlusEntityC",
attributeNodes = {
@NamedAttributeNode( value = "entityCList", subgraph = "EntityCPlusEntityD")
},
subgraphs = {
@NamedSubgraph(
name = "EntityCPlusEntityD",
attributeNodes = {
@NamedAttributeNode("entityDList")
}
)
}
)
class EntityA {}

@EntityGraph(value = "EntityAPlusEntityB", type = EntityGraph.EntityGraphType.FETCH)
Optional findEntityAById_LoadEntityB(String id);

@EntityGraph(value = "EntityAPlusEntityC", type = EntityGraph.EntityGraphType.FETCH)
Optional findEntityAById_LoadEntityC(String id);

Проблема
В настоящее время я все еще не могу получить загруженный список Entityd в Entityc, всегда приведет к отдельному SQL, выполненному Hibernate, когда я делаю EntityC.GetEnityDlist (). Поскольку я ожидаю, что все загружено в начале, не должно быть выполнено другого SQL -запроса, поскольку это будет проблема N+1. Файл < /p>
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true


Подробнее здесь: https://stackoverflow.com/questions/796 ... ollections

Вернуться в «JAVA»