jOOQ自定义类型转换问题

时间:2013-05-21 07:15:18

标签: java jooq

在我添加自定义类型转换器之前,我的应用程序运行正常。我需要将jOOQ UInteger转换为Integer,所以我包含了一个类型转换器来实现这一点。发布此更改,我在限制和偏移量上收到mysql语法错误。

然后在调试时,我发现所提供的所有Integer值(包括限制和偏移值)都转换为UInteger(因为类型转换器)而转换为字符串,因为UInteger不是默认类型。

我可以通过链接jooq issue with limit and offset提供的解决方案来解决这个问题,但我想了解一些细节。

  1. 如果我使用settings.setStatementType(StatementType.STATIC_STATEMENT)我无法获得准备好的陈述,我可能会错过PreparedStatement的优势。

  2. 如果我使用Factory.inline绑定所有整数内联值,我必须在整个应用程序中执行此操作,如果我遗漏了某些内容,则会导致严重问题。

  3. 请帮我解决问题或给我一些建议。

1 个答案:

答案 0 :(得分:0)

我认为你正在寻找的是一种完全禁用无符号整数类型生成的方法。相关代码生成标志记录在此处:

http://www.jooq.org/doc/3.0/manual/code-generation/codegen-advanced

摘录:

<!-- Generate jOOU data types for your unsigned data types, which are
     not natively supported in Java.
     Defaults to true -->
<unsignedTypes>false</unsignedTypes>

否则,有一个未记录的解决方案将类型强制转换为另一个SQL类型而不是转换器。文档任务就在这里:

https://github.com/jOOQ/jOOQ/issues/2095

这未经过适当测试,但如果在UIntegerInteger之间进行转换,它可能会运行得很好。可以看到集成测试中的一个示例here

<forcedType>
    <name>UUID</name>
    <expressions>(?i:(.*?.)?T_EXOTIC_TYPES.UU)</expressions>
</forcedType>

在你的情况下:

<forcedType>
    <name>INTEGER</name>
    <expressions>YOUR_COLUMN_MATCHING_EXPRESSION_HERE</expressions>
</forcedType>

请注意,您始终可以将数据库架构更改为实际保留签名类型,而不是未签名类型。