【问题标题】:jOOQ - Fluent trigger builder API?jOOQ - 流畅的触发器构建器 API?
【发布时间】:2018-06-06 17:43:01
【问题描述】:

是否有任何流畅的“创建触发器”构建器?这很奇怪,但我找不到任何触发器构建器示例(也在jOOQ manual 中搜索但没有成功)。

我要转换硬编码语句:

"CREATE TRIGGER " + TRIGGER_DELETE_TAB + " " +
"BEFORE DELETE ON " + TABLE_TABS + " " +
"BEGIN " +
"DELETE FROM " + TABLE_CHORDNAMES + " " +
"WHERE " + CHORDNAME_TAB + " = " + "OLD."+TAB_ID +"; " +
"END;"

类似的东西:

SQLiteDSL.createTrigger(TRIGGER_DELETE_TAB)
    .beforeDeleteOn(TABLE_TABS)
    .begin()
    .deleteFrom(TABLE_CHORDNAMES)
    .where(column(CHORDNAME_TAB).eq("OLD."+TAB_ID))
    .end()
    .getSQL();

【问题讨论】:

    标签: java sql jooq


    【解决方案1】:

    jOOQ 可以包含一个 API 来实现一个真正微不足道的触发器,就像你的那样,而且很有可能,它会在未来的某个版本中 (#6956)。

    但为了完全支持触发器,jOOQ 需要一个运行时模型来抽象各种过程语言首先,然后再详细介绍供应商特定的触发器功能。有一个特性请求“添加过程语言抽象API”,其实是:#6475

    这正在为即将发布的 jOOQ 3.11 版本开发,它肯定会支持 BEGIN .. END 样式块:#6474

    对于 jOOQ 3.10 及更低版本,您需要基于此处记录的普通 SQL 模板机制构建自己的 jOOQ 扩展 API:

    https://www.jooq.org/doc/latest/manual/sql-building/plain-sql-templating

    您不需要太多的管道来使该功能正常工作...

    【讨论】:

      【解决方案2】:

      我认为你不能这样做,但你可以改用ExecuteListeners,它可以被视为触发器,你可以做一些类似于你用你的 SQL 构建的东西。

      您可以查看他们关于ExecuteListeners 的文档,他们还提供了一些示例,例如查询统计监听器、日志监听器等等。

      他们建议扩展DefaultExecuteListener 并从Javadoc 开始,他们有很多可以覆盖的方法。我很确定你会找到你需要的。

      【讨论】:

      • 是否有任何背景/动机为什么不支持这种微不足道的事情。 e.如果有这方面的 SQL,我为什么要编写 Java 代码?最初,我想编写一些自己的 SQL builder,然后我找到了 jOOQ,所以我很高兴有一个现有的解决方案,但现在我重新考虑了我的初衷。
      • 对不起,我不是项目的维护者,所以,对于功能请求,你会想去他们的 github 上询问这个问题。如果你查看他们的流利的 api,他们有很多“流利”的方法。仅仅因为createTrigger 方法不存在对于大多数人来说可能不是一个交易破坏者,因为无论如何都没有太多人使用sql触发器。但是,嘿,我很确定,如果你在 jooq github 页面上买票并提出这个功能,他们会很乐意帮助你
      • 在 jOOQ 存在的 10 年里,这实际上是第一次有人要求这个功能,所以事实上,到目前为止,我不认为这是一个交易破坏者(鉴于 plain SQL workaround has always been available) .我也不认为您应该编写自己的 SQL 构建器 ;-)。无论如何,我绝对不建议用ExecuteListener一般替换实际的SQL触发器(尽管在特定情况下这可能是一个可行的解决方案)。触发器确实属于数据库。
      • @LukasEder 你建议我更新我的答案以不包括ExecuteListener 而是提供纯 SQL 信息?
      • 不,这不是我对您回答的建议。这是我对大多数阅读此答案的人的建议。 ExecuteListener 可能是您想到的用例的可行解决方案。但可以肯定的是,对于 OP 所考虑的问题,这不是一个可行的解决方案。
      猜你喜欢
      • 2018-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-30
      • 2014-10-03
      • 1970-01-01
      • 2019-12-18
      相关资源
      最近更新 更多