【问题标题】:Problem with @Temporal(TemporalType.DATE)@Temporal(TemporalType.DATE) 的问题
【发布时间】:2011-06-23 10:11:11
【问题描述】:

您好,我想在我的 Java 类中映射一个字段

@Column(name = "date_of_birth")
@Temporal(TemporalType.DATE)
private Date dateOfBirth;

到我表中的一个字段:

date_of_birth date,

但现在当我尝试运行我的应用程序时出现异常:

Caused by: org.hibernate.HibernateException: Wrong 
column type in public.users for column date_of_birth.
 Found: date, expected: timestamp

这是我的配置文件:

dataSource.driverClassName=org.postgresql.Driver
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
hibernate.hbm2ddl.auto=validate
hibernate.show_sql=false

这可能是什么问题?

谢谢 大卫

【问题讨论】:

  • 看起来 @Temporal 由于某种原因被忽略了。

标签: hibernate postgresql date jpa-2.0


【解决方案1】:

有点老了,但正在寻找一些 @Temporal 用法,遇到了你已经 5 岁的问题;)。

问题很明显 :) 系统错误堆栈跟踪告诉你:

" 引起:org.hibernate.HibernateException: 列类型错误 列 date_of_birth 的 public.users。发现:日期,预期: 时间戳"

您正在尝试将 Date 对象放入需要 TimeStamp 的数据库中 -> 您的 TemporalType 属于 DATE 类型,而 DB 需要属于 TIMESTAMP

@Column(name = "date_of_birth")

@Temporal(TemporalType.DATE)

私人日期 dateOfBirth;

【讨论】:

  • 我不知道这是不是个玩笑——我们都可以阅读。该字段在他的表中定义为日期。他在他的 Java 源代码中使用了 java.util.Date 和 TemporalType.DATE。当总是定义日期时,为什么数据库需要时间戳?
  • @Del-Pedro 好吧,我认为在否决投票或表达如此强烈的反对意见之前有点积极思考,因为没有明显的事实可以支持。问题是“可能是什么问题”。我确实提供了答案。原因,没有数据库模式也很难。
  • @DelPedro 回答您的问题:java.sql.Timestamp 扩展了 java.util.Date 并添加了纳秒字段。 Timestamp 的 equals 实现确实违反了对称性,如果 Timestamp 和 Date 对象用于相同或混合使用,则可能导致不稳定的行为。它们不相等。
【解决方案2】:

我认为您在数据库中的列类型需要为timestamp 而不是date。但这可能不是您想要的,因为您正在存储出生日期。

【讨论】:

    猜你喜欢
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多