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

Чтобы создать экземпляр сущности Customer, вы используете оператор new. Этот объект затем располагается в памяти, хотя JPA ничего о нем не знает. Если вы не станете что-либо делать с объектом, то он окажется вне области видимости и в итоге будет удален при сборке мусора, что станет концом его жизненного цикла. Далее вы можете обеспечить постоянство Customer с помощью метода EntityManager.persist(). В тот момент сущность оказывается под управлением, а ее состояние синхронизируется с базой данных. Пока сущность пребывает в этом состоянии, в котором она подвергается управлению, вы можете обновить атрибуты с использованием методов-сеттеров (например, customer.setFirstName()) или обновить содержимое с помощью метода EntityManager.refresh(). Все эти изменения будут синхронизированы между сущностью и базой данных. Если вы вызовете метод EntityManager.contains(customer), пока сущность пребывает в этом состоянии, то он возвратит true, поскольку сущность Customer содержится в контексте постоянства (то есть находится под управлением).

Сущность также может оказаться под управлением при загрузке из базы данных. Когда вы используете метод EntityManager.find() или генерируете JPQL-запрос для извлечения списка сущностей, все сущности автоматически подвергаются управлению и вы можете начать обновлять или удалять их атрибуты.

Пока сущность пребывает в состоянии, в котором она подвергается управлению, вы можете вызвать метод EntityManager.remove(), в результате чего эта сущность окажется удалена из базы данных и больше не будет находиться под управлением. Однако Java-объект продолжит располагаться в памяти, и вы все еще сможете использовать его до тех пор, пока сборщик мусора не избавится от этого объекта.

Теперь взглянем на состояние, в котором сущность является отсоединенной. Вы уже видели в предыдущей главе, как явный вызов метода EntityManager.clear() или EntityManager.detach(customer) приводит к удалению сущности из контекста постоянства; она оказывается отсоединенной. Однако есть другой, более тонкий способ отсоединить сущность: ее сериализация.

Во многих примерах в этой книге сущности ничего не реализуют, однако если им потребуется пересечь сеть при удаленном вызове или пересечь уровни для вывода на уровне представления, то им потребуется реализовать интерфейс java.io.Serializable. Это не JPA-, а Java-ограничение. Когда находящаяся под управлением сущность сериализуется, пересекает сеть и десериализуется, она рассматривается как отсоединенный объект. Чтобы снова присоединить сущность, вам потребуется вызвать метод EntityManager.merge(). Распространенный сценарий использования — вариант, когда сущность задействуется в JSF-странице. Допустим, сущность Customer выводится в форме на удаленной JSF-странице, подлежащей обновлению. Будучи удаленной, сущность нуждается в сериализации на стороне сервера перед отправкой на уровень представления. В тот момент сущность автоматически отсоединяется. После вывода, если какие-либо данные изменятся и их понадобится обновить, форма будет отправлена, а сущность — отослана обратно на сервер, десериализована. Она потребует слияния, чтобы снова присоединиться.

Методы обратного вызова и слушатели позволяют вам добавлять собственную бизнес-логику, когда с сущностью происходят определенные события жизненного цикла.

<p>Обратные вызовы</p>

Операции, выполняемые с сущностями во время их жизненного цикла, подпадают под четыре категории: обеспечение постоянства, обновление, удаление и загрузка. При этом они аналогичны категориям операций с базами данных, к которым относятся соответственно вставка, обновление, удаление и выборка. Во время каждого жизненного цикла имеют место события с приставками pre и post, которые могут быть перехвачены менеджером сущностей для вызова бизнес-метода. Такие бизнес-методы должны быть снабжены одной из аннотаций, описанных в табл. 6.7. Эти аннотации могут применяться к методам класса-сущности, отображенного суперкласса или класса-слушателя обратных вызовов.

Таблица 6.7. Аннотации обратных вызовов жизненного цикла
Перейти на страницу:

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

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

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

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

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

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

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

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