生産データベースはPostgresです。表の場合、非id列の1つのデータを生成するためにシーケンスを使用しています。このシーケンスはそうのように定義されており、フライウェイの移行から実行されます。このすべてが素晴らしい作品H2のシーケンスを使用すると、検索用の行を見つけることができません
@Generated(GenerationTime.INSERT)
@Column(nullable = false, insertable=false, updatable=false)
private Integer checkNumber;
のPostgresに対して実行されている:
create sequence check_number_seq minvalue 1000 maxvalue 9999 cycle;
alter table guest_check alter column check_number set default nextval('check_number_seq'::regclass);
エンティティは、として定義された列を持っています。残念ながら、私たちがテストに使用しているH2に対して実行すると、うまくいきません。テストは、テーブルに対して実行する場合、それらはすべて同じエラーで失敗
create sequence IF NOT EXISTS check_number_seq minvalue 1000 maxvalue 9999 cycle;
alter table guest_check alter column check_number set default nextval('check_number_seq');
しかし:私はH2で動作するようにシーケンス作成を少し変更したバージョンとのテストで実行する@Sql
スクリプトを追加しました:
org.springframework.orm.jpa.JpaSystemException: Unable to locate row for retrieval of generated properties: [com.foo.entity.thing.GuestCheck#1000];
私はH2モードを変えて、Postgresに変えようとしましたが、問題は解決しません。我々はスプリングブート1.5.1を使用しています。
今のところ、私たちはPostgres DBに対してテストを実行していますが、使いやすさのためにH2に戻ってみたいと思います。
H2接続文字列とは何ですか?あなたは 'jdbc:h2:mem:play; MODE = PostgreSQL; LOCK_MODE = 0'のようなものを設定しますか? – StanislavL
JPAではないため、 '@Generated(GenerationTime.INSERT)'は何か言いたいことがあります。デバッグを行うとJPAプロバイダのログが表示されます。 –
@ StanislavLはい、それはまさに私が設定したものです。 – Gregg