В отдельном файле book_mapping.xml (листинг 5.27), придерживаясь заданной XML-схемы, вы можете изменить отображение для любых данных сущности. Тег

позволяет вам изменить имя таблицы, в которую будет отображаться сущность (BOOK_XML_MAPPING вместо BOOK по умолчанию). В теге вы можете настроить атрибуты, указав не только их имена и длину, но и их связи с другими сущностями. Например, вы можете изменить отображение для столбца title и количество страниц (nbOfPage).

Листинг 5.27. Отображение файла META-INF/book_mapping.xml

·················xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance"

············xsi: schemaLocation="http://java.sun.com/xml/ns/persistence/orm 

·················http://java.sun.com/xml/ns/persistence/orm_2_1.xsd"

·················version="2.1">

··

····

····

······

········

······

······

········

······

······

········

······

····

··

Всегда следует помнить о том, что XML имеет преимущественное значение перед аннотациями. Хотя атрибут description и аннотирован посредством @Column(length = 500), используется та длина столбца, которая указана в файле book_mapping.xml (см. листинг 5.27). Она равна 2000. Это может привести в замешательство, если вы взглянете на соответствующий код и увидите значение 500, а затем посмотрите на DDL-код и увидите значение 2000. Никогда не забывайте проверять XML-дескриптор развертывания.

Результатом слияния XML-метаданных и метаданных аннотаций является то, что сущность Book будет отображена в структуру таблицы BOOK_XML_MAPPING, определенную в листинге 5.28. Если вы решите полностью проигнорировать аннотации и определить свое отображение с использованием только XML, то сможете добавить тег в файл book_mapping.xml (в данном случае все аннотации будут игнорироваться, даже если XML не будет содержать переопределение).

Листинг 5.28. Структура таблицы BOOK_XML_MAPPING

create table BOOK_XML_MAPPING (

··ID BIGINT not null,

··BOOK_TITLE VARCHAR(255) not null,

··DESCRIPTION VARCHAR(2000),

··NB_OF_PAGE INTEGER not null,

··PRICE DOUBLE(52, 0),

··ISBN VARCHAR(255),

··ILLUSTRATIONS SMALLINT,

··primary key (ID)

);

Чтобы заставить все это работать, не хватает лишь одной порции информации. Вам нужно указать ссылку на файл book_mapping.xml в своем файле persistence.xml, для чего потребуется прибегнуть к тегу . Названный файл определяет контекст постоянства сущности и базу данных, в которую она должна быть отображена. Это самая важная порция информации, которая необходима поставщику постоянства для ссылки на внешний XML-файл отображения. Произведите развертывание сущности Book с обоими XML-файлами в каталоге META-INF, и все будет готово (листинг 5.29).

Листинг 5.29. Файл persistence.xml со ссылкой на внешний файл отображения

·············xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance"

·············xsi: schemaLocation="http://java.sun.com/xml/ns/persistence 

·············http://java.sun.com/xml/ns/persistence/persistence_2_1.xsd"

·············version="2.1">

··

····org.eclipse.persistence.jpa.PersistenceProvider

······org.agoncal.book.javaee7.chapter05.Book

······META-INF/book_mapping.xml

······

········

······

··

Перейти на страницу:

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