Создадим в проекте приложения класс сущности, унаследованный от com.haulmont.cuba.security.entity.User
и добавим в него требуемый атрибут с соответствующими методами доступа:
@Entity(name = "sales$User") @Extends(User.class) public class ExtUser extends User { @Column(name = "ADDRESS", length = 100) private String address; public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
В аннотации
@Entity
должно быть указано новое имя сущности. Так как базовая сущность не объявляет стратегию наследования, то по умолчанию это SINGLE_TABLE
. Это означает, что унаследованная сущность будет храниться в той же таблице, что и базовая, и аннотация
@Table
не требуется. Другие аннотации базовой сущности -
@NamePattern
,
@Listeners
и прочие - автоматически применяются к расширяющей сущности, но могут быть переопределены в ее классе.
Важным элементом класса новой сущности является аннотация @Extends
с базовым классом в качестве параметра. Она позволяет сформировать реестр расширяющих сущностей, и заставить механизмы платформы
использовать их повсеместно вместо базовых. Реестр реализуется классом ExtendedEntities
, который является бином Spring с именем cuba_ExtendedEntities
, и доступен также через интерфейс
Metadata
.
Добавим локализованное название нового атрибута в пакет com.sample.sales.entity
:
messages.properties
ExtUser.address=Address
messages_ru.properties
ExtUser.address=Адрес
Зарегистрируем новую сущность в файле
persistence.xml
проекта:
<class>com.sample.sales.entity.ExtUser</class>
Добавим в скрипты создания и обновления базы данных команду модификации соответствующей таблицы:
alter table SEC_USER add ADDRESS varchar(100)