gpt4 book ai didi

java - jOOQ 代码生成 : forcedType

转载 作者:行者123 更新时间:2023-11-30 11:16:31 27 4
gpt4 key购买 nike

我目前正在评估 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com