Читаем Изучаем 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

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

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

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

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

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

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

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

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

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