6

我想就 Hibernate 创建的数据库序列寻求一些帮助。

我在我的实体类中有这个注释 - 下面的代码 - 以便为合作伙伴表提供单独的序列。我希望序列以 1000 开头,因为我在部署期间使用 import.sql 将测试数据插入到我的数据库中,并且我想避免违反约束。但是当我想要持久化数据时,我得到了约束违反异常,它告诉我 partner_id = 2 已经存在的事实。看来我错过了什么。

    @Id
    @Column(name = "partner_id")
    @SequenceGenerator(initialValue=1000, 
                        allocationSize=1,
                        name = "partner_sequence", 
                        sequenceName="partner_sequence")
    @GeneratedValue(generator="partner_sequence")
    private Long partnerId;

生成的序列如下所示:

CREATE SEQUENCE partner_sequence
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 1
  CACHE 1;
ALTER TABLE partner_sequence
  OWNER TO postgres;

我使用postgres 9.1。

我错过了什么?这就是我如何接近我想要的方式?

提前感谢您的帮助!

4

2 回答 2

5

initialValuehibernate.id.new_generator_mappings=true如果根据本文指定,则支持。我遇到了与这篇文章中所述相同的问题,我按照这个食谱解决了它。现在可以正确生成序列。

于 2014-02-22T02:05:23.090 回答
3

initialValue并且alocattionSize特定于hilo使用序列的算法。据此甚至不支持 initialValue我什至看不到 Java 层如何支持它,因为序列值是在数据库中生成的。

另见hibernate oracle序列产生大间隙

于 2013-01-04T07:06:54.953 回答