我想问一些关于Hibernate创建的数据库序列的帮助。
我在我的实体类中有这个注释 - 下面的代码,以便为partner表提供单独的序列。我希望序列以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。
我错过了什么吗?这是我如何处理我想要的方式?
提前感谢您的帮助!
答案 0 :(得分:5)
initialValue
,则支持 hibernate.id.new_generator_mappings=true
。我有同样的问题,如本文所述,我按照这个方法解决了它。序列现在正确生成。
答案 1 :(得分:3)
initialValue
和alocattionSize
特定于使用序列的hilo
算法。根据{{3}} initialValue
甚至不支持。我甚至没有看到如何从Java层支持它,因为序列值是在数据库中生成的。
另见this