找不到hibernate JDBC类型

时间:2011-03-07 19:09:48

标签: oracle hibernate

hibernate是否具有此oracle数据类型的任何映射:(10G) TIMESTAMP(6)带时区

我得到: JDBC类型的无方言映射:-101

我的经理不想这样做:registerHibernateType(-101, Hibernate.getText().getname())

他认为这太过分了。:) 我还有什么选择?

2 个答案:

答案 0 :(得分:0)

目前,我通过以下方式解决了问题:

`select TO_CHAR(TRUNC(field)) from table` //field is the one having type= timestamp with timezone

这可确保在查询返回时,该字段的数据类型为“String”

答案 1 :(得分:0)

您提供给自己的答案更像是一种解决方法,而不是一种正确的解决方案。为了寻找答案的访客,我将提供我的观点:

1)基于数据库日期的字段应始终设置为UTC,永远不要使用特定时区。使用时区信息计算日期是不必要的复杂性。请记住,世界上许多国家/地区的时区通常每年更改两次(“夏令时”)。有一个原因,为什么只有少数RDMBS支持这一点,并且Hibernate开发人员拒绝支持这种数据类型的原因。 Hibernate的补丁很简单(一行代码),其含义不是。

2)将“timestamp with timezone”转换为String只会导致以后出现问题。一旦将其作为String检索,您将需要再次将其转换为Date / Calendar对象,这是一种不必要的开销。更不用说与此操作相关的风险。

3)如果您需要知道某个用户在哪个时区,只需存储表示时区偏移量的字符串(如“Europe / Prague”)。您可以在Java中使用它来构建包含日期/时间和时区的日历,因为它将为您处理DST。