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

До сих пор я исходил из того, что сущность будет отображаться в одну таблицу, также известную как первичная таблица. Но если у вас есть уже существующая модель данных, необходимо разбросать данные по нескольким таблицам, или вторичным таблицам. Для этого вам потребуется прибегнуть к аннотации @SecondaryTable, чтобы ассоциировать вторичную таблицу с сущностью, или @SecondaryTables (с буквой s на конце) в случае с несколькими вторичными таблицами. Вы можете распределить данные требуемой сущности по столбцам как первичной таблицы, так и вторичных таблиц, просто определив вторичные таблицы с использованием аннотаций, а затем указав для каждого атрибута то, к какой таблице он относится (с помощью аннотации @Column, более подробное описание которой я приведу в подразделе «@Column»). В листинге 5.2 показано отображение атрибутов сущности Address в одну первичную таблицу и две вторичные таблицы.

Листинг 5.2. Атрибуты сущности Address, отображаемые в три разные таблицы

@Entity

@SecondaryTables({

··@SecondaryTable(name = "city"),

··@SecondaryTable(name = "country")

})

public class Address {

··@Id

··private Long id;

··private String street1;

··private String street2;

··@Column(table = "city")

··private String city;

··@Column(table = "city")

··private String state;

··@Column(table = "city")

··private String zipcode;

··@Column(table = "country")

··private String country;

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

}

По умолчанию атрибуты сущности Address будут отображаться в первичную таблицу (которая по умолчанию имеет имя сущности, поэтому называется ADDRESS). Аннотация @SecondaryTables проинформирует вас о том, что в данном случае есть две вторичные таблицы: CITY и COUNTRY. Затем вам потребуется указать, какой атрибут в какой таблице будет располагаться (с использованием аннотации @Column(table="city") или @Column(table="country")). На рис. 5.1 показана структура таблиц, в которых будет отображаться сущность Address. Каждая таблица содержит разные атрибуты, однако у всех имеется один и тот же первичный ключ (для соединения таблиц). Опять-таки не забывайте, что Derby преобразует имена таблиц в нижнем регистре (city) в имена таблиц в верхнем регистре (CITY).

Рис. 5.1. Сущность Address отображается в трех таблицах

Как вы, вероятно, уже поняли, для одной и той же сущности может быть несколько аннотаций. Если вы захотите переименовать первичную таблицу, то можете добавить аннотацию @Table, как показано в листинге 5.3.

Листинг 5.3. Первичная таблица переименовывается в T_ADDRESS

@Entity

@Table(name = "t_address")

@SecondaryTables({

··@SecondaryTable(name = "t_city"),

··@SecondaryTable(name = "t_country")

})

public class Address {

··// Атрибуты, конструктор, геттеры, сеттеры

}

Примечание

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

<p>Первичные ключи</p>
Перейти на страницу:

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

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

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

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

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

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

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

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

Все жанры