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

• В иерархии наследования, если слушатели определены для множественных сущностей, слушатели, определенные в суперклассе, вызываются раньше слушателей, определенных в подклассах. Если не требуется, чтобы сущность наследовала слушателей суперкласса, то можно явным образом исключить их, используя аннотацию @ExcludeSuperclassListeners (или ее XML-эквивалент).

В листинге 6.41 показан код сущности Customer, где определяется два слушателя, однако слушатель может быть определен и для нескольких сущностей. Это может оказаться полезным в ситуациях, где слушатель обеспечивает общую логику, из которой могут извлечь выгоду многие сущности. Например, вы могли бы создать DebugListener, который будет выводить имена отдельных инициируемых событий, как показано в листинге 6.42.

Листинг 6.42. DebugListener, который может быть использован любой сущностью

public class DebugListener {

··@PrePersist

··void prePersist(Object object) {

····System.out.println("prePersist");

··}

··@PreUpdate

··void preUpdate(Object object) {

····System.out.println("preUpdate");

··}

··@PreRemove

··void preRemove(Object object) {

····System.out.println("preRemove");

··}

}

Обратите внимание, что каждый метод принимает Object в качестве параметра, а это означает, что сущность любого типа может использовать этот слушатель при добавлении класса DebugListener в свою аннотацию @EntityListeners. Чтобы любая сущность вашего приложения применяла этот слушатель, вам пришлось бы пройтись по каждой и добавить их вручную в аннотацию. На этот случай в JPA предусмотрено такое понятие, как слушатели по умолчанию, которые могут охватывать все сущности в контексте постоянства. Поскольку аннотация, нацеленная на всю область видимости единицы сохраняемости, отсутствует, слушатели по умолчанию могут быть объявлены только в файле отображения XML.

В предыдущей главе вы видели, как использовать файлы отображения XML вместо аннотаций. Для определения DebugListener в качестве слушателя по умолчанию придется выполнить те же самые шаги. Потребуется создать файл отображения с XML, определенным в листинге 6.43, и произвести его развертывание с использованием приложения.

Листинг 6.43. DebugListener, определенный в качестве слушателя по умолчанию

·················xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance" 

·················xsi: schemaLocation="http://xmlns.jcp.org/xml/ns/persistence/orm 

·················http://xmlns.jcp.org/xml/ns/persistence/orm_2_1.xsd"

·················version="2.1">

···

······

·········

············

·········

······

···

В этом файле тег определяет все метаданные, у которых нет какого-либо эквивалента в виде аннотаций. Тег задает все настройки по умолчанию для единицы сохраняемости, а тег определяет слушателя по умолчанию. В persistence.xml должна иметься ссылка на этот файл, развертывание которого необходимо выполнить с использованием приложения. Тогда DebugListener будет автоматически вызываться для каждой сущности.

Если вы объявите список слушателей сущности по умолчанию, то каждый из них будет вызываться в том порядке, в котором они указаны в файле отображения XML. Слушатели сущности по умолчанию всегда вызываются раньше любых слушателей сущности, определенных в аннотации @EntityListeners. Если потребуется, чтобы для сущности не применялись слушатели по умолчанию, то можно использовать аннотацию @ExcludeDefaultListeners, как показано в листинге 6.44.

Листинг 6.44. Сущность Customer, для которой исключаются слушатели по умолчанию

@ExcludeDefaultListeners

@Entity

public class Customer {

··@Id @GeneratedValue

··private Long id;

··private String firstName;

··private String lastName;

··private String email;

··private String phoneNumber;

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

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

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

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

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

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

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

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

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