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

Типы явного доступа могут быть очень полезны (например, при работе со встраиваемыми объектами или наследованием), однако их смешение часто приводит к ошибкам. В листинге 5.23 показан пример того, что может произойти при смешении типов доступа.

Листинг 5.23. Сущность Customer, в случае с которой явным образом смешиваются типы доступа

@Entity

@Access(AccessType.FIELD)

public class Customer {

··@Id @GeneratedValue

··private Long id;

··@Column(name = "first_name", nullable = false, length = 50)

··private String firstName;

··@Column(name = "last_name", nullable = false, length = 50)

··private String lastName;

··private String email;

··@Column(name = "phone_number", length = 15)

··private String phoneNumber;

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

··@Access(AccessType.PROPERTY)

··@Column(name = "phone_number", length = 555)

··public String getPhoneNumber() {

····return phoneNumber;

··}

··public void setPhoneNumber(String phoneNumber) {

····this.phoneNumber = phoneNumber;

··}

}

В примере, показанном в листинге 5.23, тип доступа явным образом определяется как FIELD на уровне сущности. Это говорит интерфейсу PersistenceManager о том, что ему следует обрабатывать только аннотации, которыми снабжены атрибуты. Атрибут phoneNumber снабжен аннотацией @Column, ограничивающей значение его length величиной 15. Читая этот код, вы ожидаете, что в базе данных в итоге будет VARCHAR(15), однако этого не случится. Метод-геттер показывает, что тип доступа для метода getPhoneNumber() был изменен явным образом, поэтому длина равна значению length атрибута phoneNumber (до 555). В данном случае сущность AccessType.FIELD перезаписывается AccessType.PROPERTY. Тогда в базе данных у вас окажется VARCHAR(555).

<p>Коллекции базовых типов</p>

Коллекции тех или иных элементов очень распространены в Java. Из последующих разделов вы узнаете о связях между сущностями (которые могут быть коллекциями сущностей). По сути, это означает, что у одной сущности имеется коллекция других сущностей или встраиваемых объектов. Что касается отображения, то каждая сущность отображается в свою таблицу, при этом создаются ссылки между первичными и внешними ключами. Как вы уже знаете, сущность представляет собой Java-класс с идентификатором и множеством других атрибутов. Но что, если вам потребуется сохранить коллекцию Java-типов, например String или Integer? С тех пор как вышла версия JPA 2.0, это можно легко сделать без необходимости решать проблему создания отдельного класса. Для этого предназначены аннотации @ElementCollection и @CollectionTable.

Мы используем аннотацию @ElementCollection как индикатор того, что атрибут типа java.util.Collection включает коллекцию экземпляров базовых типов (то есть объектов, которые не являются сущностями) или встраиваемых объектов (подробнее на эту тему мы поговорим в разделе «Встраиваемые объекты»). Фактически этот атрибут может иметь один из следующих типов:

• java.util.Collection — общий корневой интерфейс в иерархии коллекций;

• java.util.Set — коллекция, предотвращающая вставку элементов-дубликатов;

• java.util.List — коллекция, которая применяется, когда требуется извлечь элементы в некоем порядке, определяемом пользователем.

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

Опять-таки, используя сущность-пример Book, взглянем на то, как добавить атрибут для сохранения тегов. Сегодня теги и облака тегов распространены повсеместно. Они обычно применяются при сортировке данных, поэтому представим в этом примере, что вы хотите добавить как можно больше тегов сущности Book для ее описания и быстрого поиска. Тег — это всего лишь строка, так что у сущности Book может быть коллекция строк для сохранения соответствующей информации, как показано в листинге 5.24.

Листинг 5.24. Сущность Book с коллекцией строк

@Entity

public class Book {

··@Id @GeneratedValue

··private Long id;

··private String title;

··private Float price;

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

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

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

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

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

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

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

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

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