1

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

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

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

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

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

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

4

1 回答 1

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可能工作得很好。可以在此处查看集成测试的示例

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

在你的情况下:

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

请注意,您始终可以将数据库架构更改为实际保存有符号类型,而不是无符号类型。

于 2013-05-22T11:08:25.417 回答