Изучаем Java EE 7 - [87]
Номер версии целевой базы данных | |
javax.persistence.database-minor-version | Дополнительный номер версии целевой базы данных |
javax.persistence.ddl-create-script-source | Имя сценария, создающего базу данных |
javax.persistence.ddl-drop-script-source | Имя сценария, удаляющего базу данных |
javax.persistence.sql-load-script-source | Имя сценария, загружающего информацию в базу данных |
javax.persistence.schema-generation.database.action | Определяет действие, которое должно предприниматься в отношении базы данных (none, create, drop-and-create, drop) |
javax.persistence.schema-generation.scripts.action | Определяет действие, которое должно предприниматься в отношении DDL-сценариев (none, create, drop-and-create, drop) |
javax.persistence.lock.timeout | Значение времени ожидания в миллисекундах при пессимистической блокировке |
javax.persistence.query.timeout | Значение времени ожидания в миллисекундах при запросах |
javax.persistence.validation.group.pre-persist | Группы, намеченные для валидации при наступлении события pre-persist |
javax.persistence.validation.group.pre-update | Группы, намеченные для валидации при наступлении события pre-update |
javax.persistence.validation.group.pre-remove | Группы, намеченные для валидации при наступлении события pre-remove |
Манипулирование сущностями
Мы используем менеджер сущностей как для простого манипулирования сущностями, так и для выполнения комплексных JPQL-запросов. При манипулировании одиночными сущностями интерфейс менеджера можно рассматривать как обобщенный объект доступа к данным (Data Access Object — DAO), который позволяет выполнять CRUD-операции в отношении любой сущности (табл. 6.2).
Метод | Описание |
---|---|
void persist(Object entity) | Делает так, что экземпляр помещается под управление, а также обеспечивает постоянство экземпляра |
Выполняет поиск сущности указанного класса и первичного ключа | |
Извлекает экземпляр, выборка состояния которого может быть отложенной | |
void remove(Object entity) | Удаляет экземпляр сущности из контекста постоянства и основной базы данных |
Обеспечивает слияние состояния определенной сущности с текущим контекстом постоянства | |
void refresh(Object entity) | Обновляет состояние экземпляра из базы данных, перезаписывая все изменения, внесенные в сущность, если таковые имеются |
void flush() | Синхронизирует контекст постоянства с основной базой данных |
void clear() | Очищает контекст постоянства, приводя к тому, что все сущности, которые находятся под управлением, оказываются отсоединенными |
void detach(Object entity) | Убирает определенную сущность из контекста постоянства, приводя к тому, что сущность, которая находится под управлением, оказывается отсоединенной |
boolean contains(Object entity) | Проверяет, является ли экземпляр сущностью, находящейся под управлением, которая относится к текущему контексту постоянства |
Чтобы помочь вам лучше понять эти методы, я воспользуюсь простым примером однонаправленной связи «один к одному» между Customer и Address. Обе сущности обладают автоматически генерируемыми идентификаторами (благодаря аннотации @GeneratedValue), а в случае с Customer (листинг 6.5) имеет место отложенная выборка по отношению к Address (листинг 6.6).
>@Entity
>public class Customer {
>··@Id @GeneratedValue
>··private Long id;
>··private String firstName;
>··private String lastName;
>··private String email;
>··@OneToOne (fetch = FetchType.LAZY)
>··@JoinColumn(name = "address_fk")
>··private Address address;
>··// Конструкторы, геттеры, сеттеры
>}
>@Entity
>public class Address {
>··@Id @GeneratedValue
>··private Long id;
>··private String street1;
>··private String city;
>··private String zipcode;
>··private String country;
>··// Конструкторы, геттеры, сеттеры
>}
Эти две сущности будут отображены в структуру базы данных, которая показана на рис. 6.2. Обратите внимание, что столбец ADDRESS_FK является внешним ключом, ссылающимся на ADDRESS.
Рис. 6.2. Таблицы CUSTOMER и ADDRESS
Для лучшей удобочитаемости фрагментов кода, приведенных в следующем подразделе, предполагается, что атрибут em имеет тип EntityManager, а tx — тип EntityTransaction.
Обеспечение постоянства сущности подразумевает вставку в базу данных информации, которой там еще нет (в противном случае будет сгенерировано исключение EntityExistsException). Для этого необходимо создать новый экземпляр сущности с использованием оператора new, задать значения для атрибутов, привязать одну сущность к другой, если есть ассоциации, и, наконец, вызвать метод EntityManager.persist(), как показано в варианте тестирования JUnit в листинге 6.7.
>Customer customer = new Customer("Энтони", "Балла", "[email protected]");
>Address address = new Address("Ризердаун Роуд", "Лондон", "8QE", "Англия");
>customer.setAddress(address);
>tx.begin();
>em.persist(customer);
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.