4.8.1. Расширение сущности

Создадим в проекте приложения класс сущности, унаследованный от 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)