【发布时间】:2015-04-04 05:17:52
【问题描述】:
我正在开始一些新项目,并且将使用 postgresql 而不是 MySql(像往常一样)。
所以,我的 AbstractEntity 类 id 字段现在配置了类似这样的内容
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "dynamicIdGenerator")
@GenericGenerator(
name = "dynamicIdGenerator",
strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator" ,
parameters = {
@Parameter(name = "prefer_sequence_per_entity", value = "true"),
@Parameter(name = "sequence_per_entity_suffix", value = "_id_seq"),
@Parameter(name = "initial_value", value = "100"),
@Parameter(name = "increment_size", value = "1")
})
protected Long id;
另外,我正在使用 liquibase 创建数据库表,例如:
<createTable tableName="audit_field_name">
<column autoIncrement="true" name="id" type="BIGINT">
<constraints nullable="false" primaryKey="true"/>
</column> ...
</createTable>
一切都很好,我有表 audit_field_name 和相应的
序列audit_field_name_id_sec,但此序列具有默认起始值:1。即配置@Parameter(name = "initial_value", value = "100")
被忽略了,我对此有一些麻烦。
那么,有人知道如何使用SequenceStyleGenerator 并确定initial_value 参数吗?
【问题讨论】:
-
如果让 Hibernate 生成表(和序列)会发生什么?如果由于 liquibase 已经创建了它,Hibernate 可能不会再触及您的序列了?
-
嗯,liquibase 是我们的架构要求,所以我不能让 Hibernate 生成表。但是序列是由 Hibernate 生成的,而不是由 liquibase
-
我的意思是让它运行测试。我不清楚hibernate创建序列而不是liquibase。我想这是一个纯粹的休眠问题。真的帮不上忙。对不起。
标签: hibernate postgresql sequence liquibase