liquibase 导入后 Hibernate 序列未更新

Hibernate sequence not updated after liquibase import

我有一个空的 Spring 启动应用程序,我想在其中加载以前版本的数据。此数据确实已包含主键。因此我使用 Liquibase loadData 方法:

<column name="id" type="bigint" autoIncrement="${autoIncrement}">
    <constraints primaryKey="true" nullable="false"/>
</column>
<loadData tableName="point_of_interest" separator=";" file="classpath:config/liquibase/data/public.poi.csv">
</loadData>

// the java annotations
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

这按预期工作,但 Hibernate 序列未更新。如果我想保存一个新对象,这会导致重复的主键。

我做错了什么?

干杯,丹尼尔

我对这个问题的解决方案(从 jHipster 团队复制而来)是增加休眠序列的起始值。这允许您插入 ID 小于 startValue 的所有数据,因此不会发生冲突:

<changeSet id="00000000000000" author="jhipster" dbms="postgresql,oracle">
    <createSequence sequenceName="hibernate_sequence" startValue="20000" incrementBy="1"/>
</changeSet>

添加到@Daniel 的回答,假设您正在使用 Spring,使用 liquibase 休眠,在您的更新日志中添加一个序列

<changeSet id="00000000000000" author="jhipster" dbms="postgresql,oracle"> <createSequence sequenceName="hibernate_sequence" startValue="20000" incrementBy="1"/> </changeSet>

并修改实体中的主键列以使用 GenerationType.SEQUENCE 将解决此问题。

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private Long id;