Использование идентификаторов типа Long

Добрый день!

Вопрос по использованию идентификатора типа Long для сущностей совместно с чертой Has UUID.

Требуется создать сущность с @Id типа Long.
Для генерации id используется sequence БД.
Счетчик sequence сдвигать только при сохранении в БД.

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = “tmp_seq”)
@SequenceGenerator(name = “tmp_seq”, sequenceName = “tmp_seq”, allocationSize = 1)

В документации вычитал:

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

  2. Добавление черты Has UUID настоятельно рекомендуется, если вы используете атрибут идентификатора, значение которого не присваивается непосредственно при создании экземпляра сущности в памяти (не имеет аннотации @JmixGeneratedValue).
    Это относится к идентификаторам Long и Integer, отображенным на колонку с типом identity (то есть присваиваемым базой данных), а также к идентификаторам любого типа, значение которых вводится пользователями.
    У таких сущностей метод hashCode() всегда возвращает постоянное значение, что влияет на производительность коллекций на основе хэш-таблиц.

Т.е. наличие черты Has UUID (соответственно дополнительное поле uuid помимо id) рекомендуется для “оптимизации и производительности”.

Интересует вопрос, можно ли обойтись без нее, какие могут быть проблемы если ее не использовать?
Подразумевается использовать long-идентификаторы для сущностей справочников с ограниченным числом записей, возможно небольшим.

Евгений, здравствуйте!

Для уже сохраненных в бд сущностей не вижу других проблем, кроме производительности.

Для новых сущностей лучше очень внимательно проверить, не будет ли ошибок при складывании и извлечении их из Map и Set, а это происходит в т.ч. при работе стандартного редактора, визуальных компонентов, сложных экранов и отслеживании изменений. Таким образом, возможно логику создания таких сущностей нужно будет делать максимально простой и/или что-то реализовывать по-своему. Так же лучше либо избежать создания новых экземпляров этих сущностей в рамках сложных вложенных экранов, либо тщательно протестировать этот процесс.

С уважением,
Дмитрий

1 симпатия

Понял Вас, примем к сведению при работе с long-идентификаторами. Спасибо!