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

Связь «один ко многим» наблюдается, когда один объект-источник ссылается на множество объектов-целей. Например, заказ на покупку включает несколько строк заказа (рис. 5.15). Строка заказа могла бы ссылаться на заказ на покупку с использованием аннотации @ManyToOne, однако это не тот случай, поскольку связь является однонаправленной. Order — это сторона «одного» и источник связи, а OrderLine — сторона «многих» и цель.

Рис. 5.15. Один заказ включает несколько строк

Отношения являются множественными, а навигация осуществляется только от Order по направлению к OrderLine. В Java эта множественность характеризуется интерфейсами Collection, List и Set из пакета java.util. В листинге 5.41 приведен код сущности Order с однонаправленной связью «один ко многим» относительно OrderLine (листинг 5.42).

Листинг 5.41. Order содержит orderLines

@Entity

public class Order {

··@Id @GeneratedValue

··private Long id;

··@Temporal(TemporalType.TIMESTAMP)

··private Date creationDate;

··private List orderLines;

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

}

Листинг 5.42. OrderLine

@Entity

@Table(name = "order_line")

public class OrderLine {

··@Id @GeneratedValue

··private Long id;

··private String item;

··private Double unitPrice;

··private Integer quantity;

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

}

Order из листинга 5.41 не имеет каких-либо специальных аннотаций и опирается на парадигму «конфигурация в порядке исключения». Тот факт, что коллекция типа сущности используется как атрибут для этой сущности, по умолчанию инициирует отображение связи «один ко многим». Изначально однонаправленные связи «один ко многим» задействуют таблицу соединения с двумя столбцами внешнего ключа для сохранения информации о связях. Один столбец внешнего ключа будет ссылаться на таблицу ORDER и иметь тот же тип, что и ее первичный ключ, а другой будет ссылаться на таблицу ORDER_LINE. Имя этой таблицы соединения будет состоять из имен обеих сущностей, разделенных символом «_». Таблица соединения получит имя ORDER_ORDER_LINE, а в результате у нас будет схематическая структура, показанная на рис. 5.16.

Рис. 5.16. Таблица соединения между ORDER и ORDER_LINE

Если вам не нравятся имена таблицы соединения и внешнего ключа либо если вы выполняете отображение в уже существующую таблицу, то можете воспользоваться аннотациями JPA для переопределения этих применяемых по умолчанию имен. Именем по умолчанию для столбца соединения является конкатенация имени сущности, символа «_» и имени первичного ключа, на который происходит ссылка. В то время как аннотация @JoinColumn может быть использована для изменения столбцов внешнего ключа, аннотация @JoinTable (листинг 5.43) позволяет сделать то же самое, если речь идет об отображении таблицы соединения. Вы также можете воспользоваться аннотацией @OneToMany (листинг 5.44), которая, как и @OneToOne, дает возможность настраивать саму связь (применение режима fetch и т. д.).

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

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

public @interface JoinTable {

··String name() default "";

··String catalog() default "";

··String schema() default "";

··JoinColumn[] joinColumns() default {};

··JoinColumn[] inverseJoinColumns() default {};

··UniqueConstraint[] uniqueConstraints() default {};

··Index[] indexes() default {};

}

Листинг 5.44. Сущность Order с аннотированной связью «один ко многим»

@Entity

public class Order {

··@Id @GeneratedValue

··private Long id;

··@Temporal(TemporalType.TIMESTAMP)

··private Date creationDate;

··@OneToMany

··@JoinTable(name = "jnd_ord_line",

····joinColumns = @JoinColumn(name = "order_fk"),

····inverseJoinColumns = @JoinColumn(name = "order_line_fk"))

··private List orderLines;

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

}

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

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

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

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

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

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

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

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

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