首页 > 解决方案 > 命名查询返回 java.sql.Timestamp 而不是 java.util.Date

问题描述

我正在使用休眠 5.3.13

我正在使用命名查询查询日期:

    public Date getDate() {
        return entityManager.createNamedQuery("MyEntity.myNamedQuery", Date.class)
                            //setting some parameters here
                            .getSingleResult();
    }

列定义:

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

此查询工作正常,但当我想要 java.util.Date 时,休眠返回 java.sql.Timestamp。

是否可以让休眠返回日期而不是时间戳?

标签: javahibernatejpa

解决方案


取自Hibernate – 映射日期和时间

正如我们所见,java.util.Date 类型(毫秒精度)不足以处理 Timestamp 值(纳秒精度)。

因此,当我们从数据库中检索实体时,我们会毫不意外地在该字段中找到一个 java.sql.Timestamp 实例,即使我们最初保存了一个 java.util.Date:

[...]

这对我们的代码应该没问题,因为时间戳扩展了日期。

您可以将返回的值转换为Date.

总体上查看参考资料,它为您提供了更多详细信息。


推荐阅读