У меня возникла та же проблема при использовании служебного класса JpaSchemaGenerator
, который я написал.
При создании схемы для org.hibernate.dialect.HSQLDialect
(где я использую ПОСЛЕДОВАТЕЛЬНОСТЬ для генерации своих уникальных идентификаторов) я использую следующее свойство Hibernate:
hibernate.id.new_generator_mappings=true
Это приводит к следующему CREATE
утверждению:
CREATE TABLE BATCH (
BAT_ID NUMBER(19,0) NOT NULL,
BAT_EXPIRY_DATE TIMESTAMP,
BAT_NUMBER VARCHAR2(255 CHAR),
BAT_MAT_ID NUMBER(19,0),
PRIMARY KEY (BAT_ID)
);
Но когда я использую это же свойство в своем служебном классе для генерации схемы с использованием org.hibernate.dialect.HSQLDialect
, я получаю следующий оператор CREATE
:
CREATE TABLE BATCH (
BAT_ID BIGINT NOT NULL,
BAT_EXPIRY_DATE TIMESTAMP,
BAT_NUMBER VARCHAR(255),
BAT_MAT_ID BIGINT,
PRIMARY KEY (BAT_ID)
);
Это будет означать, что если бы я создал пакет без идентификатора, он не сгенерировал бы его для меня, и ограничение NOT NULL
вызвало бы исключение.
Если я изменю свойство Hibernate на следующее:
hibernate.id.new_generator_mappings=false
Тогда будет сгенерирован следующий оператор CREATE
:
CREATE TABLE BATCH (
BAT_ID BIGINT GENERATED BY DEFAULT AS IDENTITY (START WITH 1),
BAT_EXPIRY_DATE TIMESTAMP,
BAT_NUMBER VARCHAR(255),
BAT_MAT_ID BIGINT,
PRIMARY KEY (BAT_ID)
);
Прекрасно работает при создании объектов JPA в Hibernate.