2016-12-12 11 views
2

Я использую базу данных Postgres в производстве и H2 для тестов. Я хочу создать новую последовательность для существующей таблицы - так LiquiBase я писал:Последовательность изменений в H2

<changeSet id="Add sequence for BOOKS" author="library"> 
    <createSequence sequenceName="BOOKS_SEQ" incrementBy="500" startValue="1"/> 
</changeSet> 

Моя Entity выглядит следующим образом:

@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; 
... 

} 

Теперь, так как у меня уже есть объекты в этой таблице (с идентификаторами из последней используемой последовательности), мне нужно соответствующим образом установить текущее значение этой последовательности. В этом отношении я писал:.

<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 (производство), кажется, работает нормально - но в Н2 я получаю сообщение об ошибке «Последовательность с именем [BOOKS_SEQ] является настройка неправильно ее приращение не соответствует его размеру предварительного распределения ».

В соответствии с this - Мне нужно установить значение start_value (или текущее значение) на что-то большее 500 - но я не могу понять, как это может быть done in H2.

Итак, мой вопрос: как установить текущее значение последовательности в H2?

ответ

3

Вы пробовали с этим?

alter sequence <your_sequence_name> restart with <next_value> 

Например:

alter sequence BOOKS_SEQ restart with 500 

Когда я запускаю выше команду, я BOOKS_SEQ установить его текущее значение 499 (так что следующее значение будет 500).