Читаем Изучаем 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 отсутствует значение такого столбца.

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

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

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

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

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных