Изучаем Java EE 7 - [84]
Из этой главы вы узнаете, как управлять постоянными объектами. Это означает, что вы научитесь проводить операции создания, чтения, обновления и удаления (CRUD) с помощью менеджера сущностей, а также выполнять комплексные запросы с использованием JPQL. В этой главе также рассказывается о том, как JPA справляется с конкурентным доступом и работает с кэшем второго уровня. Она заканчивается объяснением жизненного цикла сущности и того, как JPA позволяет вам добавлять собственную бизнес-логику, когда в случае с сущностью имеют место определенные события.
Менеджер сущностей
Менеджер сущностей — центральный элемент JPA. Он управляет состоянием и жизненным циклом сущностей, а также позволяет выполнять запросы к сущностям в контексте постоянства. Менеджер сущностей отвечает за создание и удаление экземпляров постоянных сущностей и поиск сущностей по их первичному ключу. Он может блокировать сущности для защиты от конкурентного доступа, используя оптимистическую или пессимистическую блокировку, а также способен задействовать JPQL-запросы для извлечения сущностей согласно определенным критериям.
Когда менеджер сущностей получает ссылку на сущность, считается, что он управляет ею. До этого момента сущность рассматривается как обычный POJO-объект (то есть отсоединенный). Мощь JPA заключается в том, что сущности могут использоваться как обычные объекты на разных уровнях приложения и стать управляемыми менеджером сущностей, когда вам необходимо загрузить или вставить информацию в базу данных. Когда сущность находится под управлением, вы можете проводить операции, направленные на обеспечение постоянства, а менеджер сущностей будет автоматически синхронизировать состояние сущности с базой данных. Когда сущность оказывается отсоединенной (то есть не находится под управлением), она снова становится простым Java-объектом, который затем может быть использован на других уровнях (например, JavaServer Faces или JSF на уровне представления) без синхронизации его состояния с базой данных.
Что касается постоянства, то реальная работа здесь начинается с помощью менеджера сущностей. Он является интерфейсом, реализуемым поставщиком постоянства, который будет генерировать и выполнять SQL-операторы. Интерфейс javax.persistence.EntityManager представляет собой API-интерфейс для манипулирования сущностями (соответствующее подмножество приведено в листинге 6.1).
>public interface EntityManager {
>··// EntityManagerFactory для создания EntityManager,
>··// его закрытия и проверки того, открыт ли он
>··EntityManagerFactory getEntityManagerFactory();
>··void close();
>··boolean isOpen();
>··// Возвращает EntityTransaction
>··EntityTransaction getTransaction();
>··// Обеспечивает постоянство, слияние сущности в базе данных,
>··// а также ее удаление оттуда
>··void persist(Object entity);
>··
>··void remove(Object entity);
>··// Обеспечивает поиск сущности на основе ее первичного ключа
>··// (с разными механизмами блокировки)
>··
>··
>··
>··// Блокирует сущность, применяя указанный тип режима блокировки
>··// (оптимистическая, пессимистическая…)
>··void lock(Object entity, LockModeType lockMode);
>··// Синхронизирует контекст постоянства с основной базой данных
>··void flush();
>··void setFlushMode(FlushModeType flushMode);
>··FlushModeType getFlushMode();
>··// Обновляет состояние сущности из базы данных,
>··// перезаписывая любые внесенные изменения
>··void refresh(Object entity);
>··void refresh(Object entity, LockModeType lockMode);
>··// Очищает контекст постоянства, а также проверяет, содержит ли он сущность
>··void clear();
>··void detach(Object entity);
>··boolean contains(Object entity);
>··// Задает и извлекает значение свойства EntityManager или подсказку
>··void setProperty(String propertyName, Object value);
>··Map
>··// Создает экземпляр Query или TypedQuery для выполнения JPQL-оператора
>··Query createQuery(String qlString);
>··
>··
>··// Создает экземпляр Query или TypedQuery для выполнения именованного запроса
>··Query createNamedQuery(String name);
>··
>··// Создает экземпляр TypedQuery для выполнения «родного» SQL-запроса
>··Query createNativeQuery(String sqlString);
>··Query createNativeQuery(String sqlString, Class resultClass);
>··Query createNativeQuery(String sqlString, String resultSetMapping);
>··// Создает StoredProcedureQuery для выполнения хранимой процедуры в базе данных
>··StoredProcedureQuery createStoredProcedureQuery(String procedureName);
>··StoredProcedureQuery createNamedStoredProcedureQuery(String name);
>··// Metamodel и CriteriaBuilder для запросов с использованием критериев
>··// (выборка, обновление и удаление)
>··CriteriaBuilder getCriteriaBuilder();
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.