【问题标题】:jOOQ and PostgreSQL domain: mapping to specific object typejOOQ 和 PostgreSQL 域:映射到特定对象类型
【发布时间】:2017-01-19 04:51:17
【问题描述】:

我正在使用 PostgreSQL 9.5 和 jOOQ 3.8.4 进行一些测试。

具体来说,我想创建一个如下所示的域:

CREATE DOMAIN my_something NUMERIC(4,2);

那么我想创建一个类型如下:

CREATE TYPE my_type (
  something my_something;      
);

最后,我有一个类型为字段的表,例如:

CREATE TABLE (
  id bigserial;
  type my_type;
);

我看到 jOOQ 3.8.4 将字段 something 的映射生成为 Object(在表记录和 POJO 中)。我期待BigDecimal,因为该域使用NUMERIC

我错了吗?如果没有,有什么办法可以解决这个问题吗?

也许我可以使用customTypesforcedTypes 来注册转换器,但我不确定它是否适用于用户定义的类型!有这方面的经验吗?

【问题讨论】:

    标签: postgresql jooq sql-domain


    【解决方案1】:

    jOOQ 3.8 尚未完全支持 PostgreSQL(或任何其他数据库的)数据类型域。这是一个待处理的功能请求: https://github.com/jOOQ/jOOQ/issues/681

    与此同时,您确实应该在此处使用forcedTypemy_type.something 重写为NUMERIC。更多信息在这里: http://www.jooq.org/doc/latest/manual/code-generation/data-type-rewrites

    这是最简单的方法。您当然也可以编写自己的数据类型绑定以获得更完整的解决方案,但我认为在这种情况下没有必要。有关数据类型绑定的更多信息在这里: http://www.jooq.org/doc/latest/manual/code-generation/custom-data-type-bindings

    【讨论】:

    • @RobertoTrunfio:很高兴听到这个消息。你知道吗,在 Stack Overflow 上,你也可以回答你自己的问题(例如,而不是在你的问题中给出部分答案)
    • 我知道,我过去做过。当我只是正式确定另一个人的答案时,我实际上不喜欢这样做。我觉得自己像个小偷。另一种选择是丰富你的答案,当涉及到重大变化时,我也不太喜欢这个
    • @RobertoTrunfio:你为什么觉得自己像个小偷? :) 您正在为下一位访客增加价值...
    【解决方案2】:

    按照Lukas Eder的建议,我刚刚添加了

    <forcedType>
      <name>NUMERIC(4,2)</name>
      <expression>my_type.something</expression>
      <types>.*</types>
    </forcedType>
    

    而且效果很好。

    【讨论】:

      猜你喜欢
      • 2022-12-08
      • 2019-12-26
      • 1970-01-01
      • 1970-01-01
      • 2016-08-23
      • 2012-05-31
      • 2012-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多