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

Первичные ключи в реляционных базах данных уникально идентифицируют все строки таблиц. Первичный ключ охватывает либо один столбец, либо набор столбцов. Такой ключ должен быть уникальным, поскольку он идентифицирует одну строку (значение null не допускается). Примерами первичных ключей являются идентификатор клиента, телефонный номер, номер получения, а также ISBN-номер. JPA требует, чтобы у сущностей был идентификатор, отображаемый в первичный ключ, который будет придерживаться аналогичного правила: уникально идентифицировать сущность с помощью либо одного атрибута, либо набора атрибутов (составной ключ). Значение этого первичного ключа сущности нельзя обновить после того, как оно было присвоено.


@Id и @GeneratedValue

Простой (то есть не являющийся составным) первичный ключ должен соответствовать одному атрибуту класса-сущности. Аннотация @Id, которую вы видели ранее, используется для обозначения простого первичного ключа. @javax.persistence.Id аннотирует атрибут как уникальный идентификатор. Он может относиться к одному из таких типов, как:

• примитивные Java-типы: byte, int, short, long, char;

• классы-обертки примитивных Java-типов: Byte, Integer, Short, Long, Character;

• массивы примитивных типов или классов-адаптеров: int[], Integer[] и т. д.;

• строки, числа и даты: java.lang.String, java.math.BigInteger, java.util.Date, java.sql.Date.

При создании сущности значение этого идентификатора может быть сгенерировано либо вручную с помощью приложения, либо автоматически поставщиком постоянства с использованием аннотации @GeneratedValue. Эта аннотация способна иметь четыре возможных значения:

• SEQUENCE и IDENTITY определяют использование SQL-последовательности базы данных или столбца идентификаторов соответственно;

• TABLE дает указание поставщику постоянства сохранить имя последовательности и ее текущее значение в таблице, увеличивая это значение каждый раз, когда будет обеспечиваться постоянство нового экземпляра сущности. Например, EclipseLink создаст таблицу SEQUENCE с двумя столбцами: в одном будет имя последовательности (произвольное), а в другом — значение последовательности (целое число, автоматически инкрементируемое Derby);

• генерирование ключа выполняется автоматически (AUTO) основным поставщиком постоянства, который выберет подходящую стратегию для определенной базы данных (EclipseLink будет использовать стратегию TABLE). AUTO является значением по умолчанию аннотации @GeneratedValue.

Если аннотация @GeneratedValue не будет определена, приложению придется создать собственный идентификатор, применив любой алгоритм, который возвратит уникальное значение. В коде, приведенном в листинге 5.4, показано, как получить автоматически генерируемый идентификатор. Будучи значением по умолчанию, GenerationType.AUTO позволило бы мне не включать в этот код элемент strategy. Обратите внимание, что атрибут id аннотирован дважды: один раз с использованием @Id и еще один раз — посредством @GeneratedValue.


Листинг 5.4. Сущность Book с автоматически генерируемым идентификатором

@Entity

public class Book {


··@Id

··@GeneratedValue(strategy = GenerationType.AUTO)

··private Long id;

··private String title;

··private Float price;

··private String description;

··private String isbn;

··private Integer nbOfPage;

··private Boolean illustrations;


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

}


Составные первичные ключи

При отображении сущностей правильным подходом будет обозначить один специально отведенный для этого столбец как первичный ключ. Однако бывают ситуации, когда требуется составной первичный ключ (скажем, если приходится выполнять отображение в унаследованную базу данных или первичные ключи должны придерживаться определенных бизнес-правил — например, необходимо включить значение или код страны и отметку времени). Для этого должен быть определен класс первичного ключа, который будет представлять составной ключ. Кроме того, у нас есть две доступные аннотации для определения этого класса в зависимости от того, как мы хотим структурировать сущность: @EmbeddedId и @IdClass. Как вы еще увидите, конечный результат будет одинаковым и в итоге у вас окажется одна и та же схема базы данных, однако способы выполнения запросов к сущности будут немного различаться.

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

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

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

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

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

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

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

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

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