在我的所有实体上,我手动定义了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;
是否可以为我的所有实体全局设置这些属性? 如果是这样,怎么样?
答案 0 :(得分:2)
Generator
和GeneratedValue
是两回事。设置Generator
后(通过注释或xml)可以访问整个持久性单元。 GeneratedValue
描述了应该如何生成给定id
(在您的情况下,它指向其中一个生成器)。
您无法提前为所有allocationSize
设置initialValue
或Generators
,但您可以为一个生成器设置它并将其用于许多实体。
另请注意,Hibernate
的默认值为allocationSize
。
答案 1 :(得分:2)
根据SequenceGenerator's documentation:
生成器名称的范围对于持久性单元是全局的 (跨所有发电机类型)。
所以你可以在package-info.java中定义一个,如reference documentation中所述:
@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;