На всех моих сущностей, я определил 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;
Можно ли установить эти атрибуты глобально для всех моих сущностей? Если да, то как?
Согласно документации 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;
Generator
и GeneratedValue
- это две разные вещи. Как только Generator
установлен (через аннотацию или xml), он доступен для целой единицы измерения продолжительности. GeneratedValue
описывает, как должен генерироваться заданный id
(в вашем случае он указывает на один из генераторов).
Вы не можете установить allocationSize
ни initialValue
для всех Generators
заранее, но вы можете установить его для одного генератора и использовать его для многих организаций.
Также обратите внимание, что Hibernate
имеет значение по умолчанию 50 для allocationSize
.