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

На рис. 5.23 показан фрагмент таблицы ITEM с данными. Как вы можете видеть, в стратегии «одна таблица на класс» имеются некоторые бреши; не каждый столбец подходит для любой из сущностей. В первой строке располагаются данные, касающиеся сущности Item (имя этой сущности содержится в столбце DTYPE). В случае с Item в таблице имеется только название, цена и описание (см. листинг 5.53), при этом отсутствует название компании звукозаписи, ISBN-номер и т. д. Поэтому соответствующие столбцы всегда будут оставаться пустыми.


Рис. 5.23. Фрагмент таблицы ITEM, наполненной данными


Столбец дискриминатора по умолчанию имеет имя DTYPE, тип String (отображаемый в VARCHAR) и содержит имя сущности. Если используемые по умолчанию значения окажутся неподходящими, то аннотация @DiscriminatorColumn позволит вам изменить имя и тип данных. По умолчанию значением этого столбца является имя сущности, на которую он ссылается, однако сущность может переопределить это значение благодаря аннотации @DiscriminatorValue.

В листинге 5.57 столбец дискриминатора переименовывается в DISC (вместо DTYPE), а также изменяется его тип данных с String на Char. Тогда значение дискриминатора каждой из сущностей должно измениться соответственно с Item на I, с Book на B (листинг 5.58) и с CD на C (листинг 5.59).


Листинг 5.57. Item переопределяет столбец дискриминатора

@Entity

@Inheritance(strategy = InheritanceType.SINGLE_TABLE)

@DiscriminatorColumn (name="disc", 

······················discriminatorType = DiscriminatorType.CHAR)

@DiscriminatorValue("I")

public class Item {

··@Id @GeneratedValue

··protected Long id;

··protected String title;

··protected Float price;

··protected String description;

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

}


Листинг 5.58. Book переопределяет значение дискриминатора на B @Entity

@DiscriminatorValue("B")

public class Book extends Item {

··private String isbn;

··private String publisher;

··private Integer nbOfPage;

··private Boolean illustrations;

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

}


Листинг 5.59. CD переопределяет значение дискриминатора на C @Entity

@DiscriminatorValue("C")

public class CD extends Item {

··private String musicCompany;

··private Integer numberOfCDs;

··private Float totalDuration;

··private String genre;

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

}

Корневая сущность Item один раз определяет столбец дискриминатора для иерархии сущностей с использованием @DiscriminatorColumn. Затем она изменяет свое значение по умолчанию на I благодаря @DiscriminatorValue. Дочерним сущностям требуется переопределить только собственное значение дискриминатора.

Результат показан на рис. 5.24. Столбец дискриминатора и его значения отличаются от тех, что были приведены ранее на рис. 5.23.


Рис. 5.24. Таблица ITEM, включающая другое имя и значения дискриминатора


Стратегия «одна таблица на класс» является самой легкой для понимания и хорошо работает, когда иерархия относительно проста и стабильна. Однако у нее имеются кое-какие недостатки: добавление новых сущностей в иерархию или атрибутов в уже существующие сущности влечет добавление новых столбцов в таблицу, миграцию данных и изменение индексов. Эта стратегия также требует, чтобы столбцы дочерних сущностей допускали значение null. Если столбец сущности Book, содержащий ISBN-номер, не окажется таковым, то вы больше не сможете вставлять данные, которые относятся к CD-альбомам, поскольку для сущности CD отсутствует значение такого столбца.


Стратегия «соединенный подкласс»

При использовании стратегии «соединенный подкласс» каждая сущность в иерархии отображается в свою таблицу. Корневая сущность отображается в таблицу, которая определяет первичный ключ, подлежащий использованию всеми таблицами в иерархии, а также столбец дискриминатора. Каждый подкласс представляется с помощью отдельной таблицы, содержащей его атрибуты (не унаследованные от корневого класса) и первичный ключ, который ссылается на первичный ключ корневой таблицы. Таблицы, не являющиеся корневыми, не содержат столбец дискриминатора.

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

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

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

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

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

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

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

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

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