Как определить allocSize и initialValue для всех сущностей

1

На всех моих сущностей, я определил allocationSize и initialValue вручную, так же, как это:

@Id
@SequenceGenerator(name = "ID_GENERATOR", sequenceName = "SEQUENCE_ID", allocationSize = 1, initialValue = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ID_GENERATOR")
@Column(name = "ID")
private Long id;

Можно ли установить эти атрибуты глобально для всех моих сущностей? Если да, то как?

Теги:
hibernate
orm
jpa
hibernate-mapping

2 ответа

2
Лучший ответ

Согласно документации SequenceGenerator:

Объем имени генератора является глобальным для единицы сохранения (для всех типов генераторов).

Таким образом, вы можете определить его в файле package-info.java, как указано в справочной документации:

@GenericGenerators({
    @GenericGenerator(
        name = "uuid2",
        strategy = "uuid2"
    )
})
package your.package;

import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.GenericGenerators;

Затем вам нужно добавить пакет в конфигурацию SessionFactory:

configuration.addPackage("your.package");  

И тогда вы можете повторно использовать эти общие генераторы во всех своих сущностях:

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "ID_GENERATOR")
@Column(name = "ID")
private Long id;
  • 0
    Как я могу сделать это со многими последовательностями для многих таблиц?
  • 1
    Для каждого генератора последовательности вы можете определить одну конфигурацию, но вам все еще нужно GeneratedValue для каждого объекта.
2

Generator и GeneratedValue - это две разные вещи. Как только Generator установлен (через аннотацию или xml), он доступен для целой единицы измерения продолжительности. GeneratedValue описывает, как должен генерироваться заданный id (в вашем случае он указывает на один из генераторов).

Вы не можете установить allocationSize ни initialValue для всех Generators заранее, но вы можете установить его для одного генератора и использовать его для многих организаций.

Также обратите внимание, что Hibernate имеет значение по умолчанию 50 для allocationSize.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню