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

В JPA 2.1 интерфейс StoredProcedureQuery (который расширяет Query) поддерживает хранимые процедуры. В отличие от динамических, именованных или «родных» запросов, этот API-интерфейс позволяет вам вызывать только ту хранимую процедуру, которая уже присутствует в базе данных, но не определять ее. Вы можете вызывать хранимую процедуру с помощью аннотаций (@NamedStoredProcedureQuery) либо динамически.

В листинге 6.30 показана сущность Book, для которой объявляется хранимая процедура sp_archive_books с использованием аннотаций именованных запросов. Аннотация @NamedStoredProcedureQuery определяет имя хранимой процедуры для вызова, типы всех параметров (Date.class и String.class), их соответствующие направления параметров (IN, OUT, INOUT, REF_CURSOR), а также то, как должны быть отображены результирующие наборы (при наличии таковых). Аннотацией @StoredProcedureParameter необходимо снабдить каждый параметр.

Листинг 6.30. Сущность, для которой объявляется именованная хранимая процедура

@Entity

@NamedStoredProcedureQuery(name = "archiveOldBooks", procedureName = 

···························"sp_archive_books",

··parameters = {

····@StoredProcedureParameter(name = "archiveDate", mode = IN, type = Date.class),

····@StoredProcedureParameter(name = "warehouse", mode = IN, 

·····························type = String.class)

··}

)

public class Book {

··@Id @GeneratedValue

··private Long id;

··private String title;

··private Float price;

··private String description;

··private String isbn;

··private String editor;

··private Integer nbOfPage;

··private Boolean illustrations;

··// Конструкторы, геттеры, сеттеры

}

Для вызова хранимой процедуры sp_archive_books вам потребуется прибегнуть к менеджеру сущностей и сгенерировать запрос к именованной хранимой процедуре, передав ее имя (archiveOldBooks). Этот запрос возвратит StoredProcedureQuery, для которого вы сможете задать параметры и выполнить его, как показано в листинге 6.31.

Листинг 6.31. Вызов StoredProcedureQuery

StoredProcedureQuery query = 

em.createNamedStoredProcedureQuery("archiveOldBooks");

query.setParameter("archiveDate", new Date());

query.setParameter("maxBookArchived", 1000);

query.execute();

Если хранимая процедура не определена с использованием метаданных (@NamedStoredProcedureQuery), то вы можете прибегнуть к API-интерфейсу для динамического генерирования запроса к хранимой процедуре. Это означает, что параметры и информацию касаемо результирующего набора потребуется обеспечить программным путем. Это можно сделать с помощью метода registerStoredProcedureParameter интерфейса StoredProcedureQuery, как показано в листинге 6.32.

Листинг 6.32. Регистрация и вызов StoredProcedureQuery

StoredProcedureQuery query = 

em.createStoredProcedureQuery("sp_archive_old_books");

query.registerStoredProcedureParameter("archiveDate", Date.class, ParameterMode.IN);

query.registerStoredProcedureParameter("maxBookArchived", Integer.class, ParameterMode.IN);

query.setParameter("archiveDate", new Date());

query.setParameter("maxBookArchived", 1000);

query.execute();

<p>Cache API</p>

В большинстве спецификаций (а не только в спецификации Java EE) много внимания уделено функциональным требованиям, а нефункциональным требованиям, таким как производительность, масштабируемость или кластеризация, отводится роль деталей реализации. Реализации должны строго придерживаться спецификации, однако также могут привносить свои особенности. Идеальным примером в случае с JPA будет кэширование.

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

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

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

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

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

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

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

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

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