2017-01-05 7 views
0

私はSpringブートアプリケーションを持っています。私はPostgresデータベースを使い、代わりにH2データベースを使いたい。H2データベースを使用しているときに@DynamicInsertが認識されない

マイSQLスキーマは、この

CREATE SEQUENCE car_id_seq START WITH 100; 
CREATE TABLE car (
    id  INTEGER DEFAULT nextval('car_id_seq') PRIMARY KEY, 
    name VARCHAR NOT NULL UNIQUE, 
    content VARCHAR NOT NULL 
); 

のように見える私の車のエンティティは、今、私はインスタンスを保持しようとするこの

@Entity @DynamicInsert @DynamicUpdate 
@Getter @Setter //lombok 
public class Car { 
    @Column @Access(AccessType.PROPERTY) 
    @Id @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Integer id; 

    @Column private String name; 
    @Column private String content; 
} 

のように見えます。 Postgres-Dbを使っても問題ありません。キーは、idの値を渡さずにinsert文を呼び出さなければならないということです。ログを有効にすると、私はこの文insert into Car (name, content) values (?, ?)を見ることができます。

私はH2に変更すると、まったく同じコードが次のSQL文insert into Car (name, content, id) values (?, ?, null)を生成することに非常に驚いています。ここでidは値nullで渡されます。もちろんこれはNULL not allowed for column "ID"; SQL statement - 例外を引き起こします。

なぜ異なる動作があり、@DynamicInsert(および@DynamicUpdate)が動作しているのを修正するにはどうすればよいですか。

のPostgreSQL 9.5.3、com.h2database:H2:1.4.193、春ブーツ1.4.2.RELEASEは、Hibernate 5.0.11.Final

答えて

0

冬眠デバッグしている間、私はそれが来るとき@DynamicInsertは効果がありませんことを実現識別子列に追加します。

重要な違いは、ここでコール

dialect.getIdentityColumnSupport().getIdentityInsertString() 

でPostgresDialectはnullを返しているとH2Dialectは"null"を返します。私はH2Dialectを拡張してnullを返しました。私の使用事例では、すべてのものが現在機能します。

おそらく誰かが私に背景が何であるか教えてくれるでしょう。

関連する問題