【问题标题】:How to Force all DATE columns to LocalDateTime in jOOQ generator?如何在 jOOQ 生成器中将所有 DATE 列强制为 LocalDateTime?
【发布时间】:2019-08-25 20:41:54
【问题描述】:

我想将所有 Oracle DATE 列强制为 LocalDateTime。

我尝试了什么:

<forcedType>
    <name>LOCALDATETIME</name>
    <userType>java.time.LocalDateTime</userType>
    <types>DATE\(*\)</types>
</forcedType>

但是 jOOQ 仍然会生成 LocalDate。

forcedType 应该是什么样子的?

【问题讨论】:

    标签: java sql jooq


    【解决方案1】:

    您的&lt;types&gt; 表达式为“DATE 后跟任意数量的(,后跟恰好一个)。您可能想要这样:

    <types>DATE(\(.*\))?</types>
    

    附带说明:您实际上不需要指定&lt;userType&gt; 即可从"data type rewriting" 功能中获利。指定与 SQLDataType 中的类型匹配的名称就足够了。

    错误

    请注意 jOOQ 3.11 中有一个错误导致 &lt;name&gt;LOCALDATETIME&lt;/name&gt; 不起作用:https://github.com/jOOQ/jOOQ/issues/8493

    这已在 jOOQ 3.12 中修复。目前,请改用&lt;name&gt;TIMESTAMP&lt;/name&gt;&lt;javaTimeTypes&gt;

    【讨论】:

    • 谢谢。如果数据库中的列只是 DATE,我将如何编写表达式?因为生成器仍然生成 LocalDate 而不是 LocalDateTime
    • 这可能与这个bug有关吗github.com/jOOQ/jOOQ/issues/6497
    • 它终于与 timestampDATE((.*))? 一起工作了
    • 嗯,很有趣。确实,我错过了那个细节。您必须指定TIMESTAMP,因为其他数据类型实际上并不存在。当然,根据手册,这是不正确的。考虑到有SQLDataType.LOCALDATETIME,可以安全地期待它起作用。也许它与另一个错误 #6497 有关,但我认为可以单独修复这个错误。我为此创建了github.com/jOOQ/jOOQ/issues/8493。感谢您的报告!
    • 很高兴帮助 jOOQ 变得更好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多