#java #sql #jooq
#java #sql #jooq
Вопрос:
У меня проблема с фрагментом кода, который генерируется (выводится) в неправильном формате и не запрашиваемой форме:
Я хотел сгенерировать запрос / sql с внешним ключом без «ALTER TABLE NameOfTab ADD», поэтому я использовал этот фрагмент кода:
DSL.constraint(DSL.name("fk_example"))
.foreignKey("id1","id2")
.references("referecnedTableName", "referencedColumn1", "referencedColumn2");
И здесь возникает проблема, потому что он возвращает в виде строки эту форму:
constraint "fk_example"
foreign key (
"id1",
"id2"
)
references "referecnedTableName" (
"referencedColumn1",
"referencedColumn2"
)
Ожидаемый результат:
constraint fk_example foreign key (id1, id2)
references referecnedTableName (referencedColumn1, referencedColumn2)
Что-то подобное в правильном формате ИЗМЕНЯЕТ таблицу:
ctx.alterTable(tableName)
.add(
DSL.constraint(DSL.name("fk_example"))
.foreignKey("id1","id2")
.references("referecnedTableName","referencedColumn1","referencedColumn2"))
.getSQL(ParamType.INLINED));
Но он возвращает его с «alter table t3 add … » и я не хочу часть «alter table».
Ответ №1:
Вы должны использовать DSLContext.render(QueryPart)
вместо QueryPart.toString()
. toString()
Поведение по умолчанию заключается в вызове render()
с некоторым неопределенным значением по умолчанию Settings
, включая генерацию этих идентификаторов в двойных кавычках, которые, как я подозреваю, вы не хотите иметь.
Комментарии:
1. Это то, чего я хотел 😉 спасибо, я уже делаю это, удаляя часть alter table с совпадениями регулярных выражений : D но это лучше 🙂