我在生产中使用 Postgres 数据库,在测试中使用 H2。
我想为现有表创建一个新序列 - 所以在 Liquibase 中我写了这个:
<changeSet id="Add sequence for BOOKS" author="library">
<createSequence sequenceName="BOOKS_SEQ" incrementBy="500" startValue="1"/>
</changeSet>
我的实体看起来像这样:
@Entity
@Table(name = "BOOKS")
@SequenceGenerator(name = "BOOKS_SEQ", allocationSize = 500)
public class Book {
@Id
@GeneratedValue(generator = "BOOKS_SEQ", strategy = GenerationType.TABLE)
private Long id;
@ManyToOne
@JoinColumn(name = "AUTHOR_ID")
private Author author;
...
}
现在,由于我在该表中已经有了实体(带有我使用的最后一个序列的 Id),因此我需要相应地设置该序列的当前值。
为此,我写道:
<changeSet id="Alter sequence for BOOKS" author="library">
<sql dbms="postgresql">select setval('BOOKS_SEQ', (select nextval('OLD_SEQUENCE_UID')))</sql>
</changeSet>
<changeSet id="Add default value to BOOKS.ID" author="library">
<addDefaultValue tableName="BOOKS" columnName="ID" defaultValueSequenceNext="BOOKS_SEQ"/>
</changeSet>
在 Postgres(生产)中,它似乎工作得很好 - 但在 H2 中我收到一条错误消息“名为 [BOOKS_SEQ] 的序列设置不正确。其增量与预分配大小不匹配”。
根据this https://stackoverflow.com/questions/18474046/eclipselink-and-sequence-generator-preallocation- 我需要将 start_value (或当前值)设置为大于 500 - 但我不知道这是怎么回事H2完成 http://www.h2database.com/html/grammar.html#alter_sequence.
所以我的问题是:如何设置 H2 中序列的当前值?