jOOQ 目前不支持 DML 的提示,但在路线图上:https://github.com/jOOQ/jOOQ/issues/2654
与此同时,您的选择是:
例如通过DSLContext.execute(String)。通常,您会通过Query.getSQL() 和Query.getBindValues() 从jOOQ Query 中提取SQL。例如:
Query query = ctx.insertInto(...).values(...);
ctx.execute(
query.getSQL().replace("insert into", "insert /*+APPEND*/ into"),
query.getBindValues().toArray()
);
自己实现 DML 提示支持
通过ExecuteListener 修补在renderEnd() 事件上生成的SQL,只要某些标志设置为true。您可以在Configuration.data() 中添加标志,例如:
public class MyListener extends DefaultExecuteListener {
@Override
public void renderEnd(ExecuteContext ctx) {
if (ctx.data().containsKey("insert hint")) {
ctx.sql(ctx.sql().replace(
"insert into",
"insert " + ctx.data().get("insert hint") + " into"
);
}
}
}
然后:
Configuration withHint = usualConfiguration.derive();
withHint.data("insert hint", "/*+APPEND*/");
DSL.using(withHint)
.insertInto(...).values(...).execute();