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

В приведенных ранее примерах сущность Item представляла собой конкретный класс. Она была снабжена аннотацией @Entity и не имела ключевого слова abstract, однако абстрактный класс тоже может быть определен как сущность. Абстрактная сущность отличается от конкретной только тем, что нельзя непосредственно создать ее экземпляр с помощью ключевого слова new. Она обеспечивает общую структуру данных для своих листовых сущностей (Book и CD) и придерживается соответствующих стратегий отображения. Для поставщика постоянства абстрактная сущность отображается как обычная сущность. Единственное отличие заключается в пространстве Java, а не в отображении.

Класс, который не является сущностью

Классы, которые не являются сущностями, также называют временными, а это означает, что они представляют собой POJO. Сущность может выступать подклассом по отношению к классу, который не является сущностью, либо такой класс может расширять ее. Зачем вам могут понадобиться в иерархии классы, которые не являются сущностями? Объектное моделирование и наследование — это инструменты, с помощью которых совместно используются состояния и поведения. Классы, которые не являются сущностями, могут применяться для обеспечения общей структуры данных для листовых сущностей. Состояние суперкласса, не являеющегося сущностью, непостоянно, поскольку не управляется поставщиком постоянства (помните, что условием для того, чтобы класс управлялся поставщиком постоянства, является наличие аннотации @Entity).

Например, Book представляет собой сущность (листинг 5.65) и расширяет Item, который не является сущностью (у Item нет аннотаций), как показано в листинге 5.64.

Листинг 5.64. Item — простой POJO без @Entity

public class Item {

··protected String title;

··protected Float price;

··protected String description;

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

}

Сущность Book (см. листинг 5.65) наследует от Item, поэтому Java-код может получить доступ к атрибутам title, price и description, а также к любому другому методу, который определен обычным, объектно-ориентированным, путем. Item может быть конкретным или абстрактным и не влияет на финальное отображение.

Листинг 5.65. Сущность Book расширяет POJO

@Entity

public class Book extends Item {

··@Id @GeneratedValue

··private Long id;

··private String isbn;

··private String publisher;

··private Integer nbOfPage;

··private Boolean illustrations;

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

}

Класс Book является сущностью и наследует от Item. Однако в таблице были бы отображены только атрибуты Book. Атрибуты Item в структуре таблицы, определенной в листинге 5.66, отсутствуют. Чтобы обеспечить постоянство Book, вам потребуется создать экземпляр Book, задать значения для любых атрибутов по вашему желанию (title, price, isbn, publisher и т. д.), однако будет обеспечено постоянство только атрибутов Book (id, isbn и т. д.).

Листинг 5.66. В таблице BOOK атрибуты Item отсутствуют

create table BOOK (

··ID BIGINT not null,

··ILLUSTRATIONS SMALLINT,

··ISBN VARCHAR(255),

··NBOFPAGE INTEGER,

··PUBLISHER VARCHAR(255),

··primary key (ID)

);

Отображенный суперкласс

JPA определяет особый тип классов, называемых отображенными суперклассами, для совместного использования состояний и поведений, а также информации об отображении, которые от них наследуют сущности. Однако отображенные суперклассы не являются сущностями. Они не управляются поставщиком постоянства, у них нет какой-либо таблицы для отображения в нее, к ним нельзя выполнять запросы и они не могут состоять в связях, однако должны обеспечивать постоянные свойства для любых сущностей, которые расширяют их. Они аналогичны встраиваемым классам за исключением того, что могут быть использованы в сочетании с наследованием. Чтобы показать, что класс является отображенным суперклассом, нужно снабдить его аннотацией @MappedSuperclass.

При использовании корневого класса Item снабжается аннотацией @MappedSuperclass, а не @Entity, как показано в листинге 5.67. В данном случае определяется стратегия наследования (JOINED), а также аннотируются некоторые из его атрибутов с использованием @Column. Однако, поскольку отображенные суперклассы не отображаются в таблицах, не допускается применять аннотацию @Table.

Листинг 5.67. Item — отображенный суперкласс

@MappedSuperclass

@Inheritance(strategy = InheritanceType.JOINED)

public class Item {

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

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

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

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

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

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

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

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

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

Все жанры