Читаем Изучаем Java EE 7 полностью

В приведенных ранее примерах сущность Item представляла собой конкретный класс. Она была снабжена аннотацией @Entity и не имела ключевого слова abstract, однако абстрактный класс тоже может быть определен как сущность. Абстрактная сущность отличается от конкретной только тем, что нельзя непосредственно создать ее экземпляр с помощью ключевого слова new. Она обеспечивает общую структуру данных для своих листовых сущностей (Book и CD) и придерживается соответствующих стратегий отображения. Для поставщика постоянства абстрактная сущность отображается как обычная сущность. Единственное отличие заключается в пространстве Java, а не в отображении.

Класс, который не является сущностью

Классы, которые не являются сущностями, также называют временными, а это означает, что они представляют собой POJO. Сущность может выступать подклассом по отношению к классу, который не является сущностью, либо такой класс может расширять ее. Зачем вам могут понадобиться в иерархии классы, которые не являются сущностями? Объектное моделирование и наследование — это инструменты, с помощью которых совместно используются состояния и поведения. Классы, которые не являются сущностями, могут применяться для обеспечения общей структуры данных для листовых сущностей. Состояние суперкласса, не являеющегося сущностью, непостоянно, поскольку не управляется поставщиком постоянства (помните, что условием для того, чтобы класс управлялся поставщиком постоянства, является наличие аннотации @Entity).

Например, Book представляет собой сущность (листинг 5.65) и расширяет Item, который не является сущностью (у Item нет аннотаций), как показано в листинге 5.64.

Листинг 5.64. Item — простой POJO без @Entity

public class Item {

··protected String title;

··protected Float price;

··protected String description;

··// Конструкторы, геттеры, сеттеры

}

Сущность Book (см. листинг 5.65) наследует от Item, поэтому Java-код может получить доступ к атрибутам title, price и description, а также к любому другому методу, который определен обычным, объектно-ориентированным, путем. Item может быть конкретным или абстрактным и не влияет на финальное отображение.

Листинг 5.65. Сущность Book расширяет POJO

@Entity

public class Book extends Item {

··@Id @GeneratedValue

··private Long id;

··private String isbn;

··private String publisher;

··private Integer nbOfPage;

··private Boolean illustrations;

··// Конструкторы, геттеры, сеттеры

}

Класс Book является сущностью и наследует от Item. Однако в таблице были бы отображены только атрибуты Book. Атрибуты Item в структуре таблицы, определенной в листинге 5.66, отсутствуют. Чтобы обеспечить постоянство Book, вам потребуется создать экземпляр Book, задать значения для любых атрибутов по вашему желанию (title, price, isbn, publisher и т. д.), однако будет обеспечено постоянство только атрибутов Book (id, isbn и т. д.).

Листинг 5.66. В таблице BOOK атрибуты Item отсутствуют

create table BOOK (

··ID BIGINT not null,

··ILLUSTRATIONS SMALLINT,

··ISBN VARCHAR(255),

··NBOFPAGE INTEGER,

··PUBLISHER VARCHAR(255),

··primary key (ID)

);

Отображенный суперкласс

JPA определяет особый тип классов, называемых отображенными суперклассами, для совместного использования состояний и поведений, а также информации об отображении, которые от них наследуют сущности. Однако отображенные суперклассы не являются сущностями. Они не управляются поставщиком постоянства, у них нет какой-либо таблицы для отображения в нее, к ним нельзя выполнять запросы и они не могут состоять в связях, однако должны обеспечивать постоянные свойства для любых сущностей, которые расширяют их. Они аналогичны встраиваемым классам за исключением того, что могут быть использованы в сочетании с наследованием. Чтобы показать, что класс является отображенным суперклассом, нужно снабдить его аннотацией @MappedSuperclass.

При использовании корневого класса Item снабжается аннотацией @MappedSuperclass, а не @Entity, как показано в листинге 5.67. В данном случае определяется стратегия наследования (JOINED), а также аннотируются некоторые из его атрибутов с использованием @Column. Однако, поскольку отображенные суперклассы не отображаются в таблицах, не допускается применять аннотацию @Table.

Листинг 5.67. Item — отображенный суперкласс

@MappedSuperclass

@Inheritance(strategy = InheritanceType.JOINED)

public class Item {

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

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

C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных
97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT