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

Как вы можете видеть в листингах 5.35 и 5.36, эти две сущности снабжены минимально необходимыми нотациями: @Entity с @Id и @GeneratedValue для первичного ключа и все. При использовании конфигурации в порядке исключения поставщик постоянства отобразит эти две сущности в две таблицы, а также внешний ключ для связи (из customer, указывающего на address). Отображение «один к одному» инициируется тем фактом, что Address является объявленной сущностью и включает сущность Customer как атрибут. Мы автоматически предполагаем связь, используя одну сущность как свойство другой, поэтому нам не нужна аннотация @OneToOne, поскольку она опирается на правила по умолчанию (листинги 5.37 и 5.38).

Листинг 5.37. Таблица CUSTOMER с внешним ключом к ADDRESS

create table CUSTOMER (

··ID BIGINT not null,

··FIRSTNAME VARCHAR(255),

··LASTNAME VARCHAR(255),

··EMAIL VARCHAR(255),

··PHONENUMBER VARCHAR(255),

··ADDRESS_ID BIGINT,

··primary key (ID),

··foreign key (ADDRESS_ID) references ADDRESS(ID)

);

Листинг 5.38. Таблица ADDRESS

create table ADDRESS (

··ID BIGINT not null,

··STREET1 VARCHAR(255),

··STREET2 VARCHAR(255),

··CITY VARCHAR(255),

··STATE VARCHAR(255),

··ZIPCODE VARCHAR(255),

··COUNTRY VARCHAR(255),

··primary key (ID)

);

Как вы уже знаете, при использовании JPA, если не аннотировать атрибут, будут применены правила отображения по умолчанию. Таким образом, изначально внешний ключ будет носить имя ADDRESS_ID (листинг 5.37), которое представляет собой конкатенацию имени атрибута связи (здесь это address), символа «_» и имени столбца первичного ключа целевой таблицы (здесь им будет идентификатор столбца таблицы ADDRESS). Обратите также внимание, что в DDL-коде столбец ADDRESS_ID по умолчанию является nullable, а это означает, что ассоциация «один к одному» отображается в нуль (значение null) или единицу.

Для настройки отображения вы можете использовать две аннотации. Первая — @OneToOne (поскольку кардинальность отношения равна единице). Она позволяет модифицировать отдельные атрибуты ассоциации как таковой, например, подход, посредством которого должна осуществляться ее выборка. В листинге 5.39 определен API-интерфейс аннотации @OneToOne.

Листинг 5.39. API-интерфейс аннотации @OneToOne

@Target({METHOD, FIELD}) @Retention(RUNTIME)

public @interface OneToOne {

··Class targetEntity() default void.class;

··CascadeType[] cascade() default {};

··FetchType fetch() default EAGER;

··boolean optional() default true;

··String mappedBy() default "";

··boolean orphanRemoval() default false;

}

Второй аннотацией является @JoinColumn (ее API-интерфейс очень схож с API-интерфейсом аннотации @Column из листинга 5.12). Она используется для настройки столбца соединения, то есть внешнего ключа владеющей стороны. В листинге 5.40 показано, как вы применили бы две эти аннотации.

Листинг 5.40. Сущность Customer с настроенным отображением связей

@Entity

public class Customer {

··@Id @GeneratedValue

··private Long id;

··private String firstName;

··private String lastName;

··private String email;

··private String phoneNumber;

··@OneToOne (fetch = FetchType.LAZY)

··@JoinColumn(name = "add_fk", nullable = false)

··private Address address;

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

}

В JPA внешний ключ называется столбцом соединения. Аннотация @JoinColumn позволяет вам настраивать отображение внешнего ключа. В листинге 5.40 она используется для переименования столбца внешнего ключа в ADD_FK, а также для того, чтобы сделать связь обязательной, отклонив значение null (nullable=false). Аннотация @OneToOne подсказывает поставщику постоянства о том, что выборка связи должна быть отложенной (подробнее об этом мы поговорим позднее).

Однонаправленная связь с использованием @OneToMany
Перейти на страницу:

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

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

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

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

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

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

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

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