@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");
| Назад | Вперёд | Содержание |
Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены.
Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)