Итак, я использую жидкость 3.8.5 в базе данных Oracle 12 c. Что я хочу сделать, это создать таблицу следующим образом:
<createTable tableName="a_table">
<column name="id" type="int" autoIncrement="true">
<constraints primaryKey="true" nullable="false" />
</column>
<column name="name" type="nvarchar(255)">
<constraints nullable="false" />
</column>
<column name="value" type="nvarchar(255)">
<constraints nullable="false" />
</column>
</createTable>
После создания таблицы я пытаюсь заполнить ее следующим образом:
<changeSet id="change_set" author="author"
context="a_context">
<insert tableName="a_table">
<column name="name" value="NAME1" />
<column name="value"
value="VALUE1" />
</insert>
</changeSet>
Это не ' Кажется, что даже не удалось создать таблицу autoIncrement. В чем может быть проблема? Я получаю ошибку:
java.util.NoSuchElementException: Migration failed for change set path/to/my.xml::change_set::author:
Reason: liquibase.exception.DatabaseException: ORA-01400: cannot insert NULL into ("XXX"."A_TABLE"."ID")
[Failed SQL: (1400) INSERT INTO XXX.a_table (name, value) VALUES ('NAME1', 'VALUE1')]
Я искал через inte rnet, но ничего не смог найти. База данных имеет версию 12 c, и создание этой таблицы вручную с использованием прямого кода sql и IDENTITY с той же вставкой sql работает.
Что я делаю не так?
РЕДАКТИРОВАТЬ: После более тщательного изучения жидкость, похоже, не в состоянии правильно передать код в Oracle sql. ИНФОРМАЦИЯ о создании таблицы:
[INFO ] 2020-02-03 12:12:11.650 [localhost-startStop-1] l.e.j.JdbcExecutor:42 - CREATE TABLE XXX.a_table (id INTEGER NOT NULL, name NVARCHAR2(255) NOT NULL, value NVARCHAR2(255) NOT NULL, CONSTRAINT PK_A_TABLE PRIMARY KEY (id))
[INFO ] 2020-02-03 12:12:11.713 [localhost-startStop-1] l.c.ChangeSet:42 - Table a_table created