COLUMN_NAME···|TYPE_NAME|DEC&|NUM&|COLUM&|COLUMN_DEF|CHAR_OCTE&|IS_NULL&
—————
ID············|BIGINT···|0···|10··|19····|NULL······|NULL······|NO
TITLE·········|VARCHAR··|NULL|NULL|255···|NULL······|510·······|YES
PRICE·········|DOUBLE···|NULL|2···|52····|NULL······|NULL······|YES
ILLUSTRATIONS |SMALLINT |0···|10··|5·····|0·········|NULL······|YES
DESCRIPTION···|VARCHAR··|NULL|NULL|255···|NULL······|510·······|YES
ISBN··········|VARCHAR··|NULL|NULL|255···|NULL······|510·······|YES
NBOFPAGE······|INTEGER··|0···|10··|10····|NULL······|NULL······|YES
Возвращаясь к коду сущности Book (см. листинг 4.7), отмечу, что, поскольку вы использовали аннотацию @GeneratedValue (для автоматического генерирования идентификатора), EclipseLink создал таблицу последовательности для сохранения нумерации (таблица SEQUENCE). В случае со структурой таблицы BOOK JPA придерживался определенных соглашений по умолчанию, присваивая имена таблице и столбцам в соответствии с именем сущности и атрибутов (например, String отображается в VARCHAR(255)).
Проверка сгенерированной схемы
В файле persistence.xml, описанном в листинге 4.10, мы проинформировали EclipseLink о необходимости сгенерировать схему базы данных и сценарии для удаления и создания с помощью следующего свойства:
··········value="drop-and-create"/>
··········value="drop-and-create"/>
По умолчанию поставщик постоянства сгенерирует два SQL-сценария: createDDL.jdbc (листинг 4.13) со всеми SQL-операторами для создания всей базы данных целиком и dropDDL.jdbc (листинг 4.14) для удаления всех таблиц. Это удобно, когда вам необходимо выполнить сценарии с целью создания базы данных в своем процессе непрерывной интеграции.
CREATE TABLE BOOK (ID BIGINT NOT NULL, DESCRIPTION VARCHAR(255),
···················ILLUSTRATIONS SMALLINT DEFAULT 0, ISBN VARCHAR(255),
NBOFPAGE INTEGER, PRICE FLOAT, TITLE VARCHAR(255), PRIMARY KEY (ID))
CREATE TABLE SEQUENCE (SEQ_NAME VARCHAR(50) NOT NULL, SEQ_COUNT DECIMAL(15),
······················PRIMARY KEY (SEQ_NAME))
INSERT INTO SEQUENCE (SEQ_NAME, SEQ_COUNT) values ('SEQ_GEN', 0)
DROP TABLE BOOK
DELETE FROM SEQUENCE WHERE SEQ_NAME = 'SEQ_GEN'
Резюме
В данной главе приведен беглый обзор JPA 2.1. Как и большинство других спецификаций Java EE 7, JPA сосредоточен на простой объектной архитектуре, оставляя позади своего предка — тяжеловесную компонентную модель (также известную как EJB CMP 2.
Благодаря разделу «Все вместе» вы увидели, как следует выполнять JPA-приложения с использованием EclipseLink и Derby. Интеграционное тестирование — важная задача в проектах, а с помощью JPA и баз данных в оперативной памяти вроде Derby сейчас стало очень легко проводить тесты касаемо постоянства.
Из последующих глав вы больше узнаете об основных компонентах JPA. В главе 5 вы увидите, как отображать сущности, связи и наследование в базу данных. А в главе 6 внимание будет сосредоточено на API менеджера сущностей, синтаксисе JPQL. Вы узнаете о том, как использовать запросы и механизмы блокировки, а также будет объяснен жизненный цикл сущностей и то, как добавлять бизнес-логику, когда речь идет о методах сущностей и слушателях.
Глава 5. Объектно-реляционное отображение