【问题标题】:Hibernate SequenceStyleGenerator ignores initial_value paramHibernate SequenceStyleGenerator 忽略 initial_value 参数
【发布时间】: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


【解决方案1】:

最后,我发现了错误。 Hibernate 不会生成序列(在我的情况下)- liquibase 会。并且 liquibase 使用默认参数创建序列,因此设置起始值的唯一方法是更改​​序列

【讨论】:

    猜你喜欢
    • 2013-09-14
    • 2018-09-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2020-03-12
    • 1970-01-01
    • 2011-07-03
    • 2011-12-01
    相关资源
    最近更新 更多