Добрый день!
Вопрос по использованию идентификатора типа 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)
В документации вычитал:
-
Long - идентификатор типа Long. Настоятельно рекомендуется добавить черту UUID, поскольку она обеспечивает дополнительную оптимизацию и позволяет однозначно идентифицировать ваши экземпляры в распределенной среде.
-
Добавление черты Has UUID настоятельно рекомендуется, если вы используете атрибут идентификатора, значение которого не присваивается непосредственно при создании экземпляра сущности в памяти (не имеет аннотации @JmixGeneratedValue).
Это относится к идентификаторам Long и Integer, отображенным на колонку с типом identity (то есть присваиваемым базой данных), а также к идентификаторам любого типа, значение которых вводится пользователями.
У таких сущностей метод hashCode() всегда возвращает постоянное значение, что влияет на производительность коллекций на основе хэш-таблиц.
Т.е. наличие черты Has UUID (соответственно дополнительное поле uuid помимо id) рекомендуется для “оптимизации и производительности”.
Интересует вопрос, можно ли обойтись без нее, какие могут быть проблемы если ее не использовать?
Подразумевается использовать long-идентификаторы для сущностей справочников с ограниченным числом записей, возможно небольшим.