gpt4 book ai didi

hibernate - 使用 Grails 和 GORM 在 PostgreSQL 中存储日期、时间和时区

转载 作者:行者123 更新时间:2023-11-29 12:04:25 26 4
gpt4 key购买 nike

我有一个连接到 PostgreSQL 的 Grails 2.5.3 应用程序,我想在数据库中存储一个 java DateCalendar 对象,并包括时间区域。

基于PostgreSQL Documentation ,默认时间戳类型包含时区,因此您需要使用timestamptz 类型来包含时区。

不幸的是,当我尝试在域类的 mapping 闭包中设置它时,它失败了。我正在尝试使用这个:

createdDate 类型:'timestamptz'

我收到的错误是:

嵌套异常是 org.hibernate.MappingException:无法确定类型:timestamptz

不幸的是列表Hibernate types似乎不包含任何可以映射此值的内容。与日期相关的有:date, time, timestamp, calendar, calendar-date。我已经测试了其中的每一个,但它们都没有在 Postgres 中创建所需的timestamp with time zone

有些文章讨论为此创建自定义 Hibernate UserType,但这似乎是一个相当常见的用例,我不禁认为应该有一些东西让我开箱即用。

最佳答案

您可以创建自己的方言,然后将 Java 类型映射到 SQL 类型。您可以在 grails-postgresql-extensions 中看到它是如何完成的方言或只是默认的 postgresql 插件和子类。

package my.company

import java.sql.Types
import groovy.transform.CompileStatic
import net.kaleidos.hibernate.PostgresqlExtensionsDialect

@CompileStatic
class SQDialect extends PostgresqlExtensionsDialect {

SQDialect() {
registerColumnType(Types.TIMESTAMP, 'timestamp with time zone')
}
}

关于hibernate - 使用 Grails 和 GORM 在 PostgreSQL 中存储日期、时间和时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34820098/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com