package com.example;
...
@Entity
public class Pet {
@Id
protected Long id;
protected String name;
protected String color;
@ManyToOne
protected Set<Person> owners;
...
}
|
Java Platform, Enterprise Edition (Java EE) 8 Учебник по Java EE |
| Назад | Вперёд | Содержание |
Используйте Metamodel API для создания метамодели управляемых сущностей в определённом юните персистентности. Для каждого класса сущности в конкретном пакете создаётся класс метамодели с завершающим подчеркиванием и атрибутами, которые соответствуют персистентным полям или свойствам класса сущности.
Следующий класс сущностей, com.example.Pet, имеет четыре персистентных поля: id, name, color, и owners:
package com.example;
...
@Entity
public class Pet {
@Id
protected Long id;
protected String name;
protected String color;
@ManyToOne
protected Set<Person> owners;
...
}
Соответствующий класс метамодели выглядит следующим образом:
package com.example;
...
@Static Metamodel(Pet.class)
public class Pet_ {
public static volatile SingularAttribute<Pet, Long> id;
public static volatile SingularAttribute<Pet, String> name;
public static volatile SingularAttribute<Pet, String> color;
public static volatile SetAttribute<Pet, Person> owners;
}
Запросы критериев используют класс метамодели и его атрибуты для ссылки на классы управляемых объектов и их персистентное состояние и взаимосвязи.
Классы метамодели, которые соответствуют классам сущностей, имеют следующий тип:
javax.persistence.metamodel.EntityType<T>
Процессоры аннотаций обычно генерируют классы метамодели во время разработки или во время выполнения. Разработчики приложений, использующих запросы Criteria, могут выполнить одно из следующих действий:
Сгенерировать статические классы метамодели с использованием процессора аннотаций persistence provider-а
Получить класс метамодели, выполнив одно из следующих действий:
Вызовите метод getModel для корневого объекта запроса
Получите объект интерфейса Metamodel, а затем передайте тип объекта в его метод entity.
В следующем фрагменте кода показано, как получить класс метамодели сущности Pet, вызвав Root<T>.getModel:
EntityManager em = ...;
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery cq = cb.createQuery(Pet.class);
Root<Pet> pet = cq.from(Pet.class);
EntityType<Pet> Pet_ = pet.getModel();
В следующем фрагменте кода показано, как получить класс метамодели сущности Pet, сначала получив объект метамодели с помощью EntityManager.getMetamodel, а затем вызвав entity объекта метамодели:
EntityManager em = ...;
Metamodel m = em.getMetamodel();
EntityType<Pet> Pet_ = m.entity(Pet.class);
Примечание: Наиболее распространённым вариантом использования является создание типобезопасных статических классов метамодели во время разработки. Динамическое получение классов метамодели путём вызова |
| Назад | Вперёд | Содержание |
Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены.
Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)