java - JPA java.util.Date 问题

标签 java hibernate jpa

我的数据库中有日期字段,其值为“27-AUG-10 15:30:00”。我正在使用 JPA 检索并设置到模型对象中。在模型对象中,日期是额外的一天“2010-08-28 04:00:00.0”。检索时,日期应该是 2010 年 8 月 27 日,但实际日期是 2010 年 8 月 28 日。您能否建议我为什么要检索额外一天。

 import java.util.Date;
 import javax.persistence.Column;
public class Model
{
    @Column(name = "BEGIN_DATE")
private Date startDate;

    public Date getStartDate() {
    return startDate;
}

public void setStartDate(Date startDate) {
    this.startDate = startDate;
}

 }

最佳答案

默认情况下,数据库将存储您所在的时区。但是,在检索日期时,它不会添加回您所在的时区。该日期显示为 GMT。看看使用 JodaTime 来获得更好的日期库。

我给你举个例子。您需要 JodaTime 库和 JadiraTypes 库来通过 Hibernate 保留 JodaTime 日期。

http://mvnrepository.com/artifact/joda-time/joda-time/2.3
http://mvnrepository.com/artifact/org.jadira.usertype/usertype.jodatime/2.0.1

您的代码将如下所示:

@Type(type="org.jadira.usertype.dateandtime.joda.PersistentLocalDateTime") 私有(private) LocalDateTime 日期;

这将为您保留 Hibernate 的日期。

我 90% 确定 JodaTime 支持为您添加回时区。如果您真的担心,请将它们作为时间戳存储在数据库中。

尝试如上所述更改为 JodaTime,如果有任何问题请告诉我。

关于java - JPA java.util.Date 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22294744/

相关文章:

Java流-收集组合器

java - log4j 根据应用程序的登录用户在不同的文件中添加日志

java - 在应用程序中实现同步和异步行为的有效方法

当我尝试访问映射到 Controller 的页面时出现 java.lang.NullPointerException

java - 开始使用 wicket 和 Hibernate

java - 在 db hibernate 中插入外键

java - Hibernate 1 :M relationship , 行顺序、常量值表和并发

maven - 如何在 Intellij Idea 13 中将 Maven 项目部署到 Glassfish Server

java - 在同一事务方法中使用 CriteriaBuilder JPA 插入和更新会出现错误 "Foreign Key not exist"

java - 无法预部署处于无效状态的 PersistenceUnit [PU] [DeployFailed]