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

Коллекции базовых типов

Коллекции тех или иных элементов очень распространены в 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;

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

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

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

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

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

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

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

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

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