如何为所有实体定义allocationSize和initialValue

时间:2014-08-05 12:24:11

标签: java hibernate jpa orm hibernate-mapping

在我的所有实体上,我手动定义了allocationSizeinitialValue,就像这样:

@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;

是否可以为我的所有实体全局设置这些属性? 如果是这样,怎么样?

2 个答案:

答案 0 :(得分:2)

GeneratorGeneratedValue是两回事。设置Generator后(通过注释或xml)可以访问整个持久性单元。 GeneratedValue描述了应该如何生成给定id(在您的情况下,它指向其中一个生成器)。

您无法提前为所有allocationSize设置initialValueGenerators,但您可以为一个生成器设置它并将其用于许多实体。

另请注意,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;