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