Читаем Изучаем Java EE 7 полностью

Примечание

JPA нацелен на реляционные базы данных. Метаданные отображения (аннотации или XML) предназначены для отображения сущностей в структурированные таблицы, а атрибутов — в столбцы. Благодаря разным структурам хранения данных началась новая эра баз данных NoSQL (Not Only SQL — «Не только SQL») (или бессхемных баз данных): ключ/значение, столбец, документ или граф. В настоящее время JPA не позволяет отображать сущности в эти структуры. Hibernate OGM — фреймворк с открытым исходным кодом, который пытается решить этот вопрос. У EclipseLink тоже имеется несколько расширений для отображения NoSQL-структур. Рассмотрение Hibernate OGM и EclipseLink-расширений выходит за рамки этой книги, однако вам следует взглянуть на них, если вы планируете использовать базы данных NoSQL.

<p>Выполнение запросов к сущностям</p>

JPA позволяет вам отображать сущности в базах данных, а также выполнять к ним запросы с использованием разных критериев. Мощь JPA заключается в том, что он дает возможность выполнять запросы к сущностям объектно-ориентированным путем без необходимости применения внешних ключей или столбцов, относящихся к основной базе данных. Центральным элементом API-интерфейса, отвечающего за оркестровку сущностей, является javax.persistence.EntityManager. Его роль состоит в управлении сущностями, их чтении и записи в определенную базу данных наряду с обеспечением возможности проведения простых операций CRUD (create, read, update, delete — «создание», «чтение», «обновление», «удаление»), а также комплексных запросов с применением JPQL. С технической точки зрения EntityManager представляет собой всего лишь интерфейс, реализация которого обеспечивается поставщиком постоянства (например, EclipseLink). В приведенном далее фрагменте кода показано, как получить EntityManager и обеспечить постоянство сущности Book:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("chapter04PU");

EntityManager em = emf.createEntityManager();

em.persist(book);

На рис. 4.2 продемонстрировано, как интерфейс менеджера сущностей может быть использован классом (который здесь имеет имя Main) для манипулирования сущностями (в данном случае Book). С помощью таких методов, как persist() и find(), EntityManager скрывает JDBC-вызовы базы данных и оператор SQL (Structured Query Language — язык структурированных запросов) INSERT или SELECT.

Рис. 4.2. Менеджер сущностей взаимодействует с сущностью и основной базой данных

Менеджер сущностей также позволяет вам выполнять запросы к сущностям. Запрос в данном случае аналогичен запросу к базе данных за исключением того, что вместо использования SQL интерфейс JPA выполняет запросы к сущностям с применением JPQL. В его синтаксисе используется привычная точечная (.) нотация объектов. Для извлечения информации обо всех книгах, в названии которых присутствует H2G2, вы можете написать следующее:

SELECT b FROM Book b WHERE b.title = 'H2G2'

Следует отметить, что title является именем атрибута Book, а не именем столбца таблицы. JPQL-операторы манипулируют объектами и атрибутами, а не таблицами и столбцами. JPQL-оператор может выполняться с использованием динамических (генерируемых динамически во время выполнения) или статических (определяемых статически во время компиляции) запросов. Вы также можете выполнять «родные» SQL-операторы и даже хранимые процедуры. Статические запросы, также известные как именованные, определяются с использованием либо аннотаций (@NamedQuery), либо XML-метаданных. Приведенный ранее JPQL-оператор может, к примеру, быть определен как именованный запрос в отношении сущности Book. В листинге 4.3 показана сущность Book с определением именованного запроса findBookH2G2 с помощью аннотации @NamedQuery (более подробно о запросах мы поговорим в главе 6).

Листинг 4.3. Сущность Book с именованным запросом findBookH2G2

@Entity

@NamedQuery(name = "findBookH2G2", 

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных