Парсер jOOQ пока не распознает этот синтаксис. Я создал запрос функции для этого:
https://github.com/jOOQ/jOOQ/issues/8799
Обходное решение jOOQ 3.11
В настоящее время обходной путь заключается в предварительной обработке файлов SQL перед их передачей в DDLDatabase
. Вы должны найти синтаксис deferrable initially deferred
и заменить его пустой строкой.
Обходное решение jOOQ 3.12
Обратите внимание, что начиная с готовящегося jOOQ 3.12, появится новый синтаксис комментариев, специфичный для jOOQ, где вы можете закомментировать такие элементы синтаксиса только для анализатора jOOQ, пока они продолжают выполняться вашей базой данных. Запрос функции:
https://github.com/jOOQ/jOOQ/issues/8325
Функция будет работать следующим образом (это то, что будет выполняться в базе данных):
create table reference.a (
id varchar(100) not null
,foo_id varchar(100)
,constraint a$c$p primary key (id)
,constraint a$f$1
foreign key (foo_id)
references reference.b(id)
on delete restrict
on update restrict
-- [jooq ignore start]
deferrable initially deferred
-- [jooq ignore stop]
);
jOOQ будет игнорировать все, что находится между этими двумя маркерами, так что это будет то, что jOOQ анализирует
create table reference.a (
id varchar(100) not null
,foo_id varchar(100)
,constraint a$c$p primary key (id)
,constraint a$f$1
foreign key (foo_id)
references reference.b(id)
on delete restrict
on update restrict
-- [jooq ignore start]
-- [ ... ignored ... ]
-- [jooq ignore stop]
);
SQL не нужно форматировать таким образом. Я только что сделал это для этого вопроса здесь. Вы также можете использовать /* [jooq ignore start] */
для однострочного оператора SQL.
Точный токен, который разделяет части, которые должны быть проигнорированы jOOQ, может быть указан:
Settings.parseIgnoreCommentStart
Settings.parseIgnoreCommentStop