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)).

<p>Проверка сгенерированной схемы</p>

В файле persistence.xml, описанном в листинге 4.10, мы проинформировали EclipseLink о необходимости сгенерировать схему базы данных и сценарии для удаления и создания с помощью следующего свойства:

··········value="drop-and-create"/>

··········value="drop-and-create"/>

По умолчанию поставщик постоянства сгенерирует два SQL-сценария: createDDL.jdbc (листинг 4.13) со всеми SQL-операторами для создания всей базы данных целиком и dropDDL.jdbc (листинг 4.14) для удаления всех таблиц. Это удобно, когда вам необходимо выполнить сценарии с целью создания базы данных в своем процессе непрерывной интеграции.

Листинг 4.13. Сценарий createDDL.jdbc

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)

Листинг 4.14. Сценарий dropDDL.jdbc

DROP TABLE BOOK

DELETE FROM SEQUENCE WHERE SEQ_NAME = 'SEQ_GEN'

<p>Резюме</p>

В данной главе приведен беглый обзор JPA 2.1. Как и большинство других спецификаций Java EE 7, JPA сосредоточен на простой объектной архитектуре, оставляя позади своего предка — тяжеловесную компонентную модель (также известную как EJB CMP 2.x). В этой главе также рассмотрены сущности, которые представляют собой постоянные объекты, отображающие метаданные с помощью аннотаций или XML.

Благодаря разделу «Все вместе» вы увидели, как следует выполнять JPA-приложения с использованием EclipseLink и Derby. Интеграционное тестирование — важная задача в проектах, а с помощью JPA и баз данных в оперативной памяти вроде Derby сейчас стало очень легко проводить тесты касаемо постоянства.

Из последующих глав вы больше узнаете об основных компонентах JPA. В главе 5 вы увидите, как отображать сущности, связи и наследование в базу данных. А в главе 6 внимание будет сосредоточено на API менеджера сущностей, синтаксисе JPQL. Вы узнаете о том, как использовать запросы и механизмы блокировки, а также будет объяснен жизненный цикл сущностей и то, как добавлять бизнес-логику, когда речь идет о методах сущностей и слушателях.

<p>Глава 5. Объектно-реляционное отображение</p>
Перейти на страницу:

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