2012-08-27 40 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實現有。