2

我在 MySQL 中有一个表,其中一些列(MD5、FLAGCONFIRMED、FLAGCHANGEPASSWORD)定义为“char(1)”,其中唯一可能的值是 0 和 1。我希望 jOOQ 在代码生成中将它们转换为布尔值。

我创建了一个转换器:

public class BooleanConverter implements org.jooq.Converter<String, Boolean>{

   private static final long serialVersionUID = -4785961538634851898L;

   @Override
   public Boolean from(String arg0) {
      if (arg0 == null) {
         return null;
      }
      return arg0.equals("1");
   }

   @Override
   public Class<String> fromType() {
      return String.class;
   }

   @Override
   public String to(Boolean arg0) {
      if (arg0 == null) {
         return null;
      }
      return arg0.booleanValue() ? "1" : "0";
   }

   @Override
   public Class<Boolean> toType() {
      return Boolean.class;
   }

}

然后我在我的 pom 中配置了转换器(我使用 maven 来生成源)。

<customTypes>
  <customType>
    <name>java.lang.Boolean</name>
    <converter>org.test.converter.BooleanConverter</converter>
  </customType>
</customTypes>

<forcedTypes>
  <forcedType>
    <name>java.lang.Boolean</name>
    <expressions>.*\.FLAGCHANGEPASSWORD,.*\.FLAGCONFIRMED,.*\.MD5.*</expressions>
  </forcedType>
</forcedTypes>

代码已成功生成,但类型未转换,它们的类型仍然是 String。

/**
 * The table column <code>mmw.enduser.MD5</code>
 */
public final org.jooq.TableField<de.kybeidos.mmw.data.tables.records.EnduserRecord, java.lang.String> MD5 = createField("MD5", org.jooq.impl.SQLDataType.CHAR, this);

我如何使它工作?

编辑:我正在使用 jOOQ 2.6.1

4

1 回答 1

4

这似乎是 jOOQ-codegen 中的一个错误。虽然文档明确指出可以提供几个正则表达式......

<forcedTypes>
  <forcedType>
    <!-- Specify again he fully-qualified class name of your custom type -->
    <name>java.util.GregorianCalendar</name>

    <!-- Add a list of comma-separated regular expressions matching columns -->
    <expressions>.*\.DATE_OF_.*</expressions>
  </forcedType>
</forcedTypes>

取自
http://www.jooq.org/doc/2.6/manual/code-generation/custom-data-types/

...源代码实际上将<expressions/>内容解释为单个正则表达式。请尝试以下操作,用管道替换逗号:

<expressions>.*\.FLAGCHANGEPASSWORD|.*\.FLAGCONFIRMED|.*\.MD5.*</expressions>

事实上,逗号不应该用于分隔正则表达式,因为逗号可以具有正则表达式语义{a, b}或用户输入语义。我已提交#2076以在 jOOQ 2.7、3.0 中修复该问题

请注意,您不必为布尔值编写自定义转换器。BOOLEAN您可以像这样将 JDBC 类型强制到列上:

<forcedTypes>
  <forcedType>
    <name>BOOLEAN</name>
    <expressions>.*\.FLAGCHANGEPASSWORD|.*\.FLAGCONFIRMED|.*\.MD5.*</expressions>
  </forcedType>
</forcedTypes>
于 2013-01-02T17:23:57.493 回答