1

我在 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 文档中没有找到关于使用负序列的任何提及。

4

1 回答 1

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实现具有的任何参数化。

于 2012-08-27T13:22:02.087 回答