2016-12-12 60 views
2

私はプロダクションではPostgresデータベースを、テストではH2を使用しています。 私は、既存のテーブルに新しい列を作成したい - そうLiquiBaseをして、私はこれを書いた:H2のシーケンスを変更

<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で)、このシーケンスの現在の値をそれに応じて設定する必要があります。私が書いたそのことについては :Postgresの(生産)で

<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> 

、それだけで正常に動作するようです - しかし、H2に、私は[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 

Iは、上記のコマンドを実行すると、私は(そう次の値が500になる)BOOKS_SEQは499への電流の値を設定しています。

関連する問題