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