@NamedEntityGraph
@Entity
public class EmailMessage {
@Id
String messageId;
String subject;
String body;
String sender;
}
Java Platform, Enterprise Edition (Java EE) 8 Учебник по Java EE |
Назад | Вперёд | Содержание |
Именованные графы сущностей создаются с использованием аннотаций, применяемых к классам сущностей или элементу named-entity-graph
и его подэлементам в дескрипторе развёртывания приложения. Persistence provider будет сканировать все именованные графы сущностей, определённые в аннотациях и в XML приложения. Набор сущностей именованного графа с использованием аннотации может быть переопределён с использованием named-entity-graph
.
Аннотация javax.persistence.NamedEntityGraph
определяет один именованный граф сущностей и применяется на уровне класса. Несколько аннотаций @NamedEntityGraph
могут быть определены для класса путём добавления их в аннотацию уровня класса javax.persistence.NamedEntityGraphs
.
Аннотация @NamedEntityGraph
должна быть применена к корню графа сущностей. То есть, если EntityManager.find
или операция запроса имеет в качестве корневого объекта класс EmailMessage
, именованный граф сущностей, используемый в операции, должен быть определён в классе EmailMessage
:
@NamedEntityGraph
@Entity
public class EmailMessage {
@Id
String messageId;
String subject;
String body;
String sender;
}
В этом примере класс EmailMessage
имеет аннотацию @NamedEntityGraph
для определения именованного графа сущностей, который по умолчанию соответствует имени класса EmailMessage
. Никакие поля не включены в аннотацию @NamedEntityGraph
как атрибуты, и поля не снабжены метаданными для установки типа выборки, поэтому единственное поле, для которого будет выполняться раннее (eager) извлечение в графе загрузки или в графе выборки — это messageId
.
Атрибуты именованного графа сущностей — это поля сущности, которые должны быть включены в граф сущностей. Добавление поля в граф сущностей происходит указанием их в элементе attributeNodes
аннотации @NamedEntityGraph
с аннотацией javax.persistence.NamedAttributeNode
:
@NamedEntityGraph(name="emailEntityGraph", attributeNodes={
@NamedAttributeNode("subject"),
@NamedAttributeNode("sender")
})
@Entity
public class EmailMessage { ... }
В этом примере имя именованного графа сущностей — emailEntityGraph
включает в себя поля subject
и sender
.
Несколько определений @NamedEntityGraph
могут быть применены к классу путём группировки их в аннотации @NamedEntityGraphs
.
В следующем примере два графа сущностей определены в классе EmailMessage
. Один из них предназначен для области предварительного просмотра, которая выбирает только отправителя, тему и текст сообщения. Другой для полного просмотра сообщения, включая любые вложения сообщения:
@NamedEntityGraphs({
@NamedEntityGraph(name="previewEmailEntityGraph", attributeNodes={
@NamedAttributeNode("subject"),
@NamedAttributeNode("sender"),
@NamedAttributeNode("body")
}),
@NamedEntityGraph(name="fullEmailEntityGraph", attributeNodes={
@NamedAttributeNode("sender"),
@NamedAttributeNode("subject"),
@NamedAttributeNode("body"),
@NamedAttributeNode("attachments")
})
})
@Entity
public class EmailMessage { ... }
Используйте метод EntityManager.getEntityGraph
, передавая имя именованного графа сущностей для получение объекта EntityGraph
для этого графа сущностей:
EntityGraph<EmailMessage> eg = em.getEntityGraph("emailEntityGraph");
Назад | Вперёд | Содержание |