【问题标题】:How to define allocationSize and initialValue for all entities如何为所有实体定义 allocationSize 和 initialValue
【发布时间】:2014-08-05 12:24:10
【问题描述】:

在我所有的实体上,我手动定义了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;

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

【问题讨论】:

    标签: java hibernate jpa orm hibernate-mapping


    【解决方案1】:

    根据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;
    

    【讨论】:

    • 对于每个序列生成器,您可以定义一个配置,但您仍然需要每个实体上的 GeneratedValue。
    【解决方案2】:

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

    您不能提前为所有Generators 设置allocationSizeinitialValue,但您可以为一个生成器设置它并为多个实体使用它。

    另请注意,Hibernate 对于allocationSize 的默认值为 50。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-04
      • 1970-01-01
      • 1970-01-01
      • 2019-10-27
      • 1970-01-01
      • 2019-11-17
      相关资源
      最近更新 更多