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 { ... }

Получение объектов EntityGraph из именованных графов сущностей

Используйте метод EntityManager.getEntityGraph, передавая имя именованного графа сущностей для получение объекта EntityGraph для этого графа сущностей:

EntityGraph<EmailMessage> eg = em.getEntityGraph("emailEntityGraph");

Назад Вперёд Содержание
Логотип Oracle  Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены. Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)