2012-08-27 41 views
1

我在DB(-1,-2,-3等),负序,我想用它来生成的ID为我的实体:JPA /休眠@SequenceGenerator:负序支持

@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文档中没有发现任何关于使用负序列的提及。

回答

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实现有。