【问题标题】:JPA/Hibernate @SequenceGenerator: negative sequence supportJPA/Hibernate @SequenceGenerator:负序列支持
【发布时间】:2012-08-27 10:43:17
【问题描述】:

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

【问题讨论】:

    标签: hibernate jpa generator sequence


    【解决方案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-10-22
      • 2011-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-05
      • 2018-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多