Дизайнер сущностей

Studio предоставляет визуальный дизайнер для упрощенного создания сущностей, поэтому вам не нужно запоминать все правила и аннотации.

Эта функция свободно доступна для использования в небольших проектах с количеством сущностей и ролей до 10. В более крупных проектах она требует RAD или Enterprise подписки подписку.

Дизайнер сущностей JPA

Чтобы создать сущность, используйте меню в Окне инструментов Jmix.

new

Появится диалог New JPA Entity.

entity create

Заполните следующие поля:

  • Class - имя нового класса. Оно должно соответствовать требованиям к именам Java.

  • Package - пакет, в котором будет находиться класс. Значение по умолчанию автоматически отображается в поле. Вы можете изменить его, и Studio создаст пакет после нажатия OK.

  • Entity type - выберите тип сущности:

    • Entity - класс для сущности модели данных.

    • MappedSuperclass - базовый суперкласс, который не связан ни с какой конкретной таблицей базы данных. Такой класс сущностей аннотируется @MappedSuperclass.

    • Embeddable - встраиваемая персистентная сущность. Такой класс сущности аннотируется @Embeddable.

  • Parent - класс, от которого будет наследовать ваш новый класс.

  • Id type - выберите тип первичного ключа объекта:

    • UUID - идентификатор типа UUID.

    • Long - идентификатор типа Long. Настоятельно рекомендуется добавить черту UUID, поскольку она обеспечивает дополнительную оптимизацию и позволяет однозначно идентифицировать ваши экземпляры в распределенной среде.

    • Integer - идентификатор типа Integer. Настоятельно рекомендуется добавить черту UUID, поскольку она обеспечивает дополнительную оптимизацию и позволяет однозначно идентифицировать ваши экземпляры в распределенной среде.

    • String - идентификатор типа String. Настоятельно рекомендуется добавить черту UUID, поскольку она обеспечивает дополнительную оптимизацию и позволяет однозначно идентифицировать ваши экземпляры в распределенной среде. Конкретный класс сущностей должен иметь строгое поле, аннотированное аннотацией JPA @Id.

    • Embedded - первичный ключ является составным ключом. В этом случае конкретный класс сущностей имеет поле встраиваемого типа, представляющее ключ, аннотированное JPA @EmbeddedId.

  • Id value - в случае типа идентификатора UUID это поле включено и имеет значение Generated By Jmix. В общем случае выпадающий список Id value имеет следующие значения:

    • Generated By Jmix. Идентификатор сущности аннотирован @JmixGeneratedValue.

    • Identity column подходит только для типов идентификаторов Integer и Long. Идентификатор сущности имеет аннотацию JPA @GeneratedValue со стратегией GenerationType.IDENTITY. Значение столбца Identity column используется для автоматически увеличиваемых идентификаторов. Настоятельно рекомендуется добавить черту UUID, поскольку она обеспечивает дополнительную оптимизацию и позволяет однозначно идентифицировать ваши экземпляры в распределенной среде.

    • Assigned by user - идентификатор устанавливается пользователем. Подходит для типов идентификаторов Integer, Long, String, и Embedded .

  • Id length отображается, если выбран тип идентификатора String. Укажите максимальное количество символов. Значение по умолчанию – 255.

  • Composite id type отображается, если выбран тип идентификатора Embedded Выберите встраиваемую сущность, представляющую собой составной ключ.

  • В группе флажков Traits выберите необходимые черты.

Затем нажмите OK.

Studio отображает в редакторе три вкладки. Вместе они образуют визуальный Дизайнер сущностей:

  • Text содержит исходный код сущности.

  • Designer показывает структуру сущности. Вы можете добавлять атрибуты сущности, задавать имя экземпляра, стратегию наследования и валидацию с помощью графического интерфейса вместо написания кода Java.

  • Indexes отображает индексы и позволяет создавать новые.

Панель действий

Панель действий расположена в верхней части дизайнера сущностей. Она предоставляет доступ к следующим действиям:

  • Views - переходит к существующим экранам или создает новые экраны для текущей сущности.

    entity designer create screen
  • Event Listeners - переходит к существующим слушателям событий или создает новый для текущей сущности:

    entity designer create listener
  • Lifecycle Callbacks - добавляет заглушки методов обратных вызовов жизненного цикла:

    entity designer lifecycle callbacks

Вкладка Designer

Вкладка Designer показывает структуру сущности:

entity designer designer

В дополнение к полям, описанным в диалоговом окне Дизайнера сущностей JPA, вкладка Designer содержит следующие поля:

  • Выпадающий список Instance name.

  • Флажок DB view. Используя этот флажок, вы можете сопоставить сущность JPA с представлением базы данных. Такой класс сущностей аннотируется @DbView.

  • Кнопка-ссылка DDL Generation Settings открывает визуальный конструктор значения аннотации @DdlGeneration:

    ddl generation
  • Кнопка-ссылка Traits открывает диалоговое окно, содержащее черты:

    traits
  • В выпадающем списке Inheritance вы можете выбрать стратегию наследования.

  • С помощью редактируемой ссылки Comment вы можете добавлять комментарии к сущности.

Панель Attributes содержит действия для управления атрибутами сущности:

  • Кнопка Add (add) открывает диалоговое окно New Attribute.

  • Нажмите кнопку Copy (copy), чтобы создать копию существующего атрибута.

  • Кнопка Add to Views (add attribute to screens) открывает диалоговое окно со всеми экранами, отображающими текущую сущность. Выберите экраны, на которых будет отображаться выбранный атрибут.

    attributes collection modified
  • Нажмите кнопку Remove (remove), чтобы удалить выбранный атрибут.

  • Используйте кнопки Up (move up) / Down (move down), чтобы изменить порядок атрибутов.

На правой панели дизайнера сущностей отображаются свойства выбранного атрибута:

  • Используйте кнопку глобуса (globe) рядом с полем Name, чтобы задать удобное для пользователей имя атрибута.

  • Выпадающие списки Attribute type и Type позволяют выбрать тип атрибута сущности.

  • С помощью редактируемой ссылки Comment вы можете добавлять комментарии к атрибуту сущности.

Панель Validation используется для определения ограничений Bean Validation. Нажмите на кнопку-ссылкe рядом с выбранным ограничением. Откроется редактор ограничений:

email validation

Вкладка Text

На вкладке Text вы можете увидеть результирующий класс сущностей, созданный дизайнером.

entity designer text

Если у вас есть опыт работы с JPA, вы увидите знакомые аннотации: @Entity, @Table, @Column и т.д. Есть также несколько аннотаций, специфичных для Jmix. Наиболее важной из них является @JmixEntity в заголовке класса. В целом, любой POJO может быть сущностью в Jmix, если аннотирован @JmixEntity.

Класс сущности можно редактировать вручную, и если вернуться на вкладку Designer, в ней будут отражены изменения. Например, если вы удалите nullable = false и @NotNull из атрибута, дизайнер снимет для него флажок Mandatory.

Панель действий расположена в верхней части редактора исходного кода. Следующие действия добавляются к описанным выше:

  • Add Attribute - открывает диалоговое окно New Attribute.

  • Add Attributes to Views - открывает диалоговое окно Add Attributes to Views со всеми экранами, отображающими текущую сущность. Выберите атрибуты, которые должны быть добавлены к экранам.

    add attribute to views

Вкладка Indexes

Вкладка Indexes используется для определения уникальных индексов.

entity designer index

Чтобы создать новый индекс, нажмите кнопку New Index (add) на панели инструментов Database Indexes. Studio добавит строку в список индексов.

Выберите атрибут сущности или набор атрибутов в списке Available attributes и щелкните по стрелке arrow right, чтобы переместить его в Selected attributes.

Установите флажки Unique и/или Constraint в строке индекса.

Добавление атрибутов

Вы можете добавить атрибут, нажав кнопку Add (add) на вкладке Designer, и настроить его в появившемся диалоговом окне. В приведенном ниже примере добавлен атрибут addresses с ASSOCIATION в поле Attribute type. В этом случае для ссылки "один-ко-многим" необходимо создать обратный атрибут в сущности Address.

entity association

Кнопка со значком глобуса в правой части поля Name позволяет сразу же задать удобное для пользователя имя атрибута. Оно хранится в файле messages.properties и используется по умолчанию в компонентах UI.

entity message

Кроме того, вы можете вызвать диалоговое окно создания атрибута на вкладке Text, нажав кнопку Add Attribute на верхней панели или во всплывающем окне Generate.

entity generate

Создание имени экземпляра

Studio автоматически задает имя экземпляра для сущности, когда к ней добавляется атрибут с одним из следующих имен: name, title, caption, label, summary, description, firstName, lastName, middleName.

Если вы хотите задать другие атрибуты для генерации имени экземпляра, используйте визуальный конструктор. Его можно открыть нажав кнопку со значком карандаша в поле Instance name.

entity instance editor

Имя экземпляра также можно создать на вкладке Text. Наведите курсор на имя класса, нажмите Alt+Enter (⌥↩) и выберите Add instance name.

entity instance text

Дизайнер сущностей DTO

Чтобы создать сущность DTO, нажмите New (add) → DTO Entity в Jmix Tool Window. Появится диалоговое окно New DTO Entity.

dto entity

Отображаемые поля аналогичны полям сущности JPA. Заполните их и нажмите OK.

Studio отображает две вкладки для созданной сущности.

  • Text содержит исходный код сущности DTO.

  • Designer показывает структуру сущности.

Перечисления

Studio помогает работать с перечислениями, предоставляя набор действий и визуальный конструктор. Чтобы создать перечисление, нажмите New (add) → Enumeration в окне инструментов Jmix.

После создания перечисления его класс будет открыт в редакторе с двумя вкладками.

entity enum editor
  • Text содержит исходный код.

  • Designer показывает дизайнер перечислений, в котором вы можете настроить перечисление и его значения с помощью графического интерфейса вместо написания кода Java.

Используйте таблицу Values и связанные с ней кнопки для настройки констант перечисления.

  • Колонка Name позволяет ввести имя константы перечисления, которое будет использоваться в коде. Его можно переименовать позже, не затрагивая существующие данные в базе данных.

  • Колонка Value позволяет ввести идентификатор константы перечисления. Это фактическое значение, хранящееся в базе данных.

Кнопка глобуса позволяет задать локализованные надписи для выбранной константы перечисления.

Дизайнер также предоставляет возможность изменять тип идентификатора, используемый перечислением, со String на Integer и наоборот. Studio мигрирует используемые перечисления в коде. После этого вам нужно изменить значения существующих констант перечисления.

Такая миграция не переносит значения перечисления, уже сохраненные в таблицах базы данных; вам будет нужно реализовать такую миграцию самостоятельно.