У меня есть приложение Spring Boot. Я использую базу данных Postgres и хочу альтернативно использовать базу данных H2.@DynamicInsert не распознается при использовании базы данных H2
My 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 выглядит следующим образом
@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 все в порядке. Ключ состоит в том, что оператор insert должен вызываться без передачи значения для id. С включенными протоколами я могу видеть это заявление 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