【问题标题】:Issue with jOOQ custom Type conversionjOOQ 自定义类型转换的问题
【发布时间】:2013-05-15 21:06:06
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 我觉得你在这个问题中混合了几件事:类型转换,绑定变量内联。你现在想解决什么样的问题?
  • 我想使用类型转换而不内联绑定变量。因为我不能内联绑定所有变量
  • 我还是不太明白转换和变量绑定有什么关系……这是为了避免一些转换吗?您最初遇到的问题是什么?
  • 原来的问题是:由于我使用自定义类型转换器在 Integer 和 UInteger 类型之间进行转换,所有整数值(包括限制和偏移值)都被转换为 UInteger 而不是仅转换 _ids 这实际上是在生成 jOOQ 类时配置的。希望你能解决我的问题!!
  • 是的,我明白这一点,由于this ticket 中提到的原因,您不应该这样做。这是 jOOQ 处理转换器的设计缺陷。但是我现在该如何回答这个问题呢?在我看来,这个 Stack Overflow 问题实际上没有任何问题。我这边的问题是,您为什么首先尝试使用转换器?你不能只使用 UInteger.intValue() 吗?

标签: java jooq


【解决方案1】:

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

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>

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

【讨论】:

  • 是的,这是我第一次尝试的,但我的前辈对此并不满意,因为它完全删除了无符号类型的概念。在某些情况下,我们需要无符号类型而不是某些情况。这就是为什么我们选择了另一个称为自定义类型转换器的选项。
  • 如果现在是设计缺陷,我可以期待在不久的将来解决这个问题吗?
  • @Yuvaraj:如果某些列不需要“无符号”,那么为什么要在数据库中声明它们无符号呢?不幸的是,我无法保证何时修复“转换器问题”,但请参阅更新后的答案以获取替代解决方案。
猜你喜欢
  • 2015-09-04
  • 2011-02-23
  • 2013-09-01
  • 2015-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-04
  • 2014-11-24
相关资源
最近更新 更多