我在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文档中没有发现任何关于使用否定序列的提及。
答案 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
实现的参数化。