在我添加自定义类型转换器之前,我的应用程序运行正常。我需要将jOOQ UInteger转换为Integer,所以我包含了一个类型转换器来实现这一点。发布此更改,我在限制和偏移量上收到mysql语法错误。
然后在调试时,我发现所提供的所有Integer值(包括限制和偏移值)都转换为UInteger(因为类型转换器)而转换为字符串,因为UInteger不是默认类型。
我可以通过链接jooq issue with limit and offset提供的解决方案来解决这个问题,但我想了解一些细节。
如果我使用settings.setStatementType(StatementType.STATIC_STATEMENT)
我无法获得准备好的陈述,我可能会错过PreparedStatement的优势。
如果我使用Factory.inline
绑定所有整数内联值,我必须在整个应用程序中执行此操作,如果我遗漏了某些内容,则会导致严重问题。
请帮我解决问题或给我一些建议。
答案 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
这未经过适当测试,但如果在UInteger
和Integer
之间进行转换,它可能会运行得很好。可以看到集成测试中的一个示例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>
请注意,您始终可以将数据库架构更改为实际保留签名类型,而不是未签名类型。