java - jOOQ 代码生成 : forcedType

标签 java sql jooq

我目前正在评估 jOOQ。我们在创建连接语句时遇到问题,如下所示:

create.select( )
        .from( TABLEA, TABLEB)
        .where(TABLEA.ID.equal( TABLEB.TABLEA_ID ));

因为类型不匹配。在 (Oracle 11g) 数据库中,TABLEA 是 NUMBER(22,0),但 TABLEB.TABLEA_ID 是 NUMBER(7,0)

因此 jOOQ 为第一个属性生成一个 BigInteger 字段,但为后者生成一个 Integer 字段。

所以我尝试用 BigInteger 和以下 xml 生成所有 NUMBER(.*,0):

    <forcedTypes>
        <forcedType>
          <name>DECIMAL_INTEGER</name>
          <expression>.*</expression>
          <types>NUMBER(.*,0)</types>
        </forcedType>
    </forcedTypes>

</database>

但这没有用。我仍然有类型为 Integer 的字段。那么,除了更改表格列类型之外,我还能做些什么呢?

最佳答案

不幸的是#2485尚未在 jOOQ 3.4 中实现,因此您无法匹配长度、精度和比例。我意识到手册似乎另有说明,这是错误的...

如果这只是偶尔发生,您还可以求助于通过 jOOQ API 操作数据类型。以下是一些选项:

// This will render an actual cast in the generated SQL statement
TABLEA.ID.equal( TABLEB.TABLEA_ID.cast(TABLEA.ID.getDataType()) )
TABLEA.ID.equal( TABLEB.TABLEA_ID.cast(BigInteger.class) )

// This generate a new column TABLEA_ID of type NUMBER(22, 0)
TABLEA.ID.equal( TABLEB.TABLEA_ID.coerce(TABLEA.ID.getDataType()) )
TABLEA.ID.equal( TABLEB.TABLEA_ID.coerce(BigInteger.class) )

// This is your last resort: raw types
TABLEA.ID.equal( (Field) TABLEB.TABLEA_ID )

关于java - jOOQ 代码生成 : forcedType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24824141/

相关文章:

php - 如何计算一个词在mysql数据库的多行中的出现次数

sql - 如何将 SELECT 语句的一部分放入 Postgres 函数中

jooq - 在 JOOQ 中,我们如何使用 Java Instant 映射到 Postgresql 时间戳类型?

java - Jooq - 带有时间的日期列

java - 如何使用 JOOQ 批量执行

java - 使用 JPAMetaModelEntityProcessor 的优势?

java - 如何在cxf webservice中获取请求参数

Java在循环中实例化一个类

Java 已启动但返回退出代码=13 eclipse

mysql - SQL 连接父类(super class)型和子类型表