JPA / Hibernate @SequenceGenerator:负序支持

时间:2012-08-27 10:43:17

标签: hibernate jpa generator sequence

我在DB(-1,-2,-3等)中有一个负序,我想用它来为我的实体生成ID:

@Entity
@Table(name="FOO")
@SequenceGenerator(name="foo_seq", sequenceName="negative_seq", allocationSize=1)
public class Foo {
    @Id
    @Column(name="id")
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="foo_seq")
    private Long id;
}

问题是SequenceHiLoGenerator被使用,并且它在以下代码段中的generate方法中进入无限循环:

while ( value == null || value.lt( 0 ) ) {
    value = super.generateHolder( session );
}

这是否意味着Hibernate不支持负序列?或者我做错了什么?我在Hibernate文档中没有发现任何关于使用否定序列的提及。

1 个答案:

答案 0 :(得分:1)

不支持减少序列生成器,不支持。但是添加自己的org.hibernate.id.IdentifierGenerator实现很容易。我们称之为org.my.DecreasingSequenceGenerator

@Entity
@Table(name="FOO")
@GenericGenerator(
    name="my_seq",
    strategy="org.my.DecreasingSequenceGenerator",
    parameters = {
        @Parameter( name="sequence", value="negative_seq" ),
        ...
    }
)
public class Foo {
    @Id
    @Column(name="id")
    @GeneratedValue(generator="my_seq")
    private Long id;
}

传递您希望DecreasingSequenceGenerator实现的参数化。