gpt4 book ai didi

oracle - JPA 2.0 Oracle DATE 时间为空

转载 作者:行者123 更新时间:2023-12-02 11:48:41 25 4
gpt4 key购买 nike

这似乎是个愚蠢的问题,但我一整天都在围着树追着尾部。我有一个 Struts 2 + Spring3/JPA/Hibernate 应用程序,它将一个大集合插入到数据库中。该集合中有一个 Java 实用程序日期。我在 Dao 插入行之前检查了日期,并且所有日期都有正确的时间。插入后,Oracle DB 中的所有行都没有时间,只有日期。就好像时间被截断了,但是事务中没有出现错误。

我想在发布任何代码之前,我会问这个问题,看看是否有人可以建议我可能忽略的东西?数据库是Oracle 10g。 JPA 2.0。该列上有注释:

@Column(name = "READING_DATE")
@Temporal(TemporalType.DATE)
private Date readingDate;

将列类型设置为 TemporalType.TIMESTAMP 会导致 Hibernate 异常

column READING_DATE. Found: date, expected: timestamp

感谢任何/所有回复。

最佳答案

对于此类问题,提供 JDBC 驱动程序的版本和您正在使用的方言通常会有所帮助。

无论如何,我的理解是您实际上想要以下映射(对于日期时间):

@Column(name = "READING_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date readingDate;

您面临的问题在某种程度上与 Oracle 在 9.2 版本中引入的疯狂行为有关,请参阅 What is going on with DATE and TIMESTAMP? (简而言之,他们引入了 TIMESTAMP 列并更改了 DATE SQL 类型的映射,请阅读常见问题解答)。有几个选项可以解决这个问题(我当然假设您正在使用 TemporalType.TIMESTAMP 映射):

要么使用TIMESTAMP 列类型(我在这里不是指TemporalType.TIMESTAMP,我真正的意思是数据库上的列类型边)。但如果您不需要纳秒精度,这不是最佳选择。

或者将 oracle.jdbc.V8Compatible=true 兼容性模式设置为系统属性或连接属性:

<property name="hibernate.connection.oracle.jdbc.V8Compatible">true</property>

是的,您可以像这样设置任意连接属性。来自 Hibernate 文档:

3.3. JDBC connections

...

Arbitrary connection properties can be given by prepending "hibernate.connection" to the connection property name. For example, you can specify a charSet connection property using hibernate.connection.charSet.

或者使用 Oracle JDBC 11.1 驱动程序(他们通过恢复更改“修复”了问题)。在我看来,这是理想的解决方案(V8Compatible 内容已弃用)。

相关问题

关于oracle - JPA 2.0 Oracle DATE 时间为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3469018/

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