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

Примечание

В Java поле определяется как атрибут экземпляра. Свойство — это любое поле с методами (геттерами или сеттерами) доступа, которые придерживаются шаблона JavaBean (в начале идет getXXX, setXXX или isXXX в случае с Boolean).


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


Листинг 5.21. Сущность Customer с аннотированными полями

@Entity

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;

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

}

При использовании доступа к свойствам, как показано в листинге 5.22, отображение базируется на геттерах, а не на атрибутах. Все геттеры, не снабженные аннотацией @Transient, являются постоянными.


Листинг 5.22. Сущность Customer с аннотированными свойствами

@Entity

public class Customer {

··private Long id;

··private String firstName;

··private String lastName;

··private String email;

··private String phoneNumber;

··// Конструкторы

··@Id @GeneratedValue

··public Long getId() {

····return id;

··}

··public void setId(Long id) {

····this.id = id;

··}

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

··public String getFirstName() {

····return firstName;

··}

··public void setFirstName(String firstName) {

····this.firstName = firstName;

··}

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

··public String getLastName() {

····return lastName;

··}

··public void setLastName(String lastName) {

····this.lastName = lastName;

··}

··public String getEmail() {

····return email;

··}

··public void setEmail(String email) {

····this.email = email;

··}

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

··public String getPhoneNumber() {

····return phoneNumber;

··}

··public void setPhoneNumber(String phoneNumber) {

····this.phoneNumber = phoneNumber;

··}

}

В плане отображения две сущности из листингов 5.21 и 5.22 полностью идентичны, поскольку имена атрибутов в данном случае совпадают с именами геттеров. Однако вместо использования типа доступа по умолчанию вы можете явным образом указать тип с помощью аннотации @javax.persistence.Access.

Эта аннотация принимает два возможных значения — FIELD или PROPERTY, а также может быть использована в отношении сущности как таковой и/или каждого атрибута или геттера. Например, при применении @Access(AccessType.FIELD) к сущности поставщиком постоянства будут приниматься во внимание только аннотации отображения, которыми снабжены атрибуты. Тогда можно будет выборочно обозначить отдельные геттеры для доступа к свойствам посредством @Access(AccessType.PROPERTY).

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

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

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

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

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

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

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

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

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