データベースを生成するために、標準の Hibernate JPA と Liquibase で実行されているアプリがあります。テストには H2 を使用し、実行時には PostgreSQL を使用します。
私の問題は、シーケンス生成を使用して主キーに対してこのセットアップをうまく機能させることができないように見えることです。
次のようなエンティティ ID がある場合:
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
次のように、liquibase を使用してデータベースを作成します。
<column name="id" type="BIGINT" autoIncrement="true" incrementBy="1">
<constraints nullable="false" primaryKey="true" />
</column>
H2 では問題なく動作しますが、PostgreSQL の場合、Hibernate は次のように不平を言います。
"Missing sequence or table: hibernate_sequence"
JPA @GeneratedValue を次のように変更することで、PostgreSQL でこれを修正できます。
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "text_id_seq")
@SequenceGenerator(name = "text_id_seq", sequenceName = "text_id_seq", allocationSize = 1)
private Long id;
しかし、H2 シーケンスは Hibernate が期待するものと一致しません。
Liquibase が特定の名前を持つシーケンスであることを確認する簡単な方法はないようです。このセットアップを機能させるにはどうすればよいですか?
私は現在走っているようです
- liquibase.version 2.0.4
- 休止状態 4.1.7
- postgres ドライバー 9.1-901.jdbc3
- postgres 9.2.1 (少なくともローカルで)
- h2 1.3.168