【问题标题】:JOOQ: how do I add multiple interfaces to generated record classes using matcher strategyJOOQ:如何使用匹配器策略向生成的记录类添加多个接口
【发布时间】:2020-08-06 07:20:50
【问题描述】:

基于here 提供的答案,我试图让我生成的记录实现多个接口。根据匹配的正则表达式(REGEX_A、REGEX_B 或两者),生成的记录应实现 IFoo 和 IBar 之一或两者。

我确实有一个 gradle-jooq-plugin 配置文件,但它在语义上应该是这样的:

<generator>
  <strategy>
    <matchers>
      <tables>
        <table>
          <expression>REGEX_A</expression>
          <recordImplements>com.test.IFoo</recordImplements>
        </table>
        <table>
          <expression>REGEX_B</expression>
          <recordImplements>com.test.IBar</recordImplements>
        </table>
      </tables>
    </matchers>
  </strategy>
</generator>

我得到的结果是匹配两个匹配器的记录只会实现 IFoo。这是预期的结果吗?有没有办法只通过匹配器配置来实现我想要的?

【问题讨论】:

    标签: interface record jooq


    【解决方案1】:

    仅应用第一个匹配的&lt;table&gt; 规范

    这些匹配器策略的工作方式,只有与 &lt;expression&gt; 匹配的第一个 &lt;table&gt; 规范应用于生成的工件。随后的匹配将被忽略。这意味着,您不能合并各种&lt;recordImplements/&gt; 规范。相反,您必须在开头添加另一个与您的正则表达式匹配的规范,如下所示:

    <generator>
      <strategy>
        <matchers>
          <tables>
            <table>
              <expression>REGEX_A.*REGEX_B|REGEX_B.*REGEX_A</expression>
              <recordImplements>com.test.IFoo, com.test.IBar</recordImplements>
            </table>
            <table>
              <expression>REGEX_A</expression>
              <recordImplements>com.test.IFoo</recordImplements>
            </table>
            <table>
              <expression>REGEX_B</expression>
              <recordImplements>com.test.IBar</recordImplements>
            </table>
          </tables>
        </matchers>
      </strategy>
    </generator>
    

    为什么不合并各种&lt;table&gt; 规范?

    对于&lt;recordImplements/&gt;,能够合并两个匹配的&lt;table&gt;匹配器规范并让结果记录匹配所有接口实现规范似乎很有用。

    但是,对于&lt;table&gt; 内的所有其他可能元素,例如&lt;tableClass&gt;&lt;tableIdentifier&gt; 等,情况并非如此,这就是为什么只有 first 匹配表达式适用于任何表。为了避免不必要地复杂化此功能,仅应用第一个匹配表达式。

    【讨论】:

    • 问题是,我在第二个匹配器中有额外的行&lt;pojoImplements&gt;com.test.IBar&lt;/pojoImplements&gt;,然后POJO 确实 有接口。所以显然两个匹配器都匹配,但只使用了第一个
    • @Sebastian:不应该这样。如果您认为这是一个错误,您是否可以提出有关该事件的更多详细信息的新问题,或者创建一个问题? github.com/jOOQ/jOOQ/issues/new/choose
    猜你喜欢
    • 2016-01-05
    • 2021-03-28
    • 2016-01-16
    • 2012-05-06
    • 1970-01-01
    • 2021-01-11
    • 2014-06-03
    • 2017-04-20
    • 2019-09-16
    相关资源
    最近更新 更多