Создадим класс сущности EBook
, представляющий собой электронную версию издания книги. Класс EBook
должен быть унаследован от Card
(карточки процесса), чтобы управлять состоянием EBook
в соответствии с требуемым бизнес-процессом.
Перейдите на вкладку Entities панели навигатора Studio, выберите пакет com.sample.library.entity
и нажмите . Введите следующие значения свойств сущности:
-
Class name -
EBook
-
Table -
LIBRARY_EBOOK
-
Parent class -
Card [wf$Card]
. Для классаCard
определена стратегия наследованияInheritanceType.JOINED
, поэтомуEBook
будет храниться в отдельной таблице и его первичный ключ будет одновременно внешним ключом, сылающимся на первичный ключCard
. -
Discriminator -
10
. Дискриминатор - это значение поля базового типа, которое будет установлено в базе данных для всех экземпляров конкретного типа. В данном случае для базового классаCard
определены аннотации:@DiscriminatorColumn(name = "CARD_TYPE", discriminatorType = DiscriminatorType.INTEGER) @DiscriminatorValue("0")
Это означает, что в поле CARD_TYPE должно храниться значение целого типа, и для экземпляров базового типа это будет значение
0
. Поэтому для типаEBook
можно задать любое значение, отличное от0
. -
В поле Primary key join column Studio автоматически сформирует имя CARD_ID для первичного ключа создаваемой сущности.
-
В поле Referenced primary key column Studio выберет первичный ключ таблицы WF_CARD, хранящей базовую сущность
Card
, то есть ID.
Далее, создадим атрибут сущности, содержащий ссылку на издание книги.
Нажмите Create attribute задайте следующие свойства:
под списком атрибутов и в окне-
Name -
publication
-
Attribute type -
ASSOCIATION
-
Type -
BookPublication [library$BookPublication]
-
Mandatory -
on
. Атрибут будет обязательным для заполнения. -
Cardinality -
MANY_TO_ONE
. Это означает, что несколько экземпляровEBook
могут быть созданы для одного экземпляраBookPublication
. -
В поле Column будет предложено подходящее имя колонки - PUBLICATION_ID.
Сохраните изменения. В результате будет создан следующий класс сущности:
package com.sample.library.entity; import javax.persistence.*; import com.haulmont.workflow.core.entity.Card; @PrimaryKeyJoinColumn(name = "CARD_ID", referencedColumnName = "ID") @DiscriminatorValue("10") @Table(name = "LIBRARY_EBOOK") @Entity(name = "library$EBook") public class EBook extends Card { private static final long serialVersionUID = -7326357893869004530L; @ManyToOne(fetch = FetchType.LAZY, optional = false) @JoinColumn(name = "PUBLICATION_ID") protected BookPublication publication; public void setPublication(BookPublication publication) { this.publication = publication; } public BookPublication getPublication() { return publication; } }
После создания класса сущности Studio сообщит о том, что модель данных изменена по сравнению с текущей схемой базы данных. Требуется сгенерировать скрипты и запустить создание или обновление БД.
Нажмите Entites на панели навигатора. Studio сгенерирует скрипты обновления и инициализации БД, включающие в себя создание таблицы LIBRARY_EBOOK и ее внешних ключей. Так как в нашей БД еще нет никаких данных, и мы можем безболезненно пересоздать ее, скрипты на вкладке Update scripts можно сразу удалить. После этого сохраните изменения.
в секцииОстановите сервер приложения командой
-> . Через несколько секунд станет доступным пункт меню -> , который и нужно выполнить.