首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@Temporal未按预期工作

@Temporal未按预期工作
EN

Stack Overflow用户
提问于 2017-10-27 10:41:00
回答 1查看 2.1K关注 0票数 1

我使用@Temporal注释创建了一个实体:

代码语言:javascript
复制
import java.util.Date;
@Entity
public class TestEntity implements java.io.Serializable {
    private long id;
    private Date endDate;

    @Id
    @GeneratedValue(generator = "MY_SEQ", strategy = GenerationType.SEQUENCE)
    public long getId() {
        return id;
    }

    public void setId(final long id) {
        this.id = id;
    }

    @Temporal(TemporalType.DATE)
    @Column(name = "END_DATE", nullable = false)
    public Date getEndDate() {
        return endDate;
    }

    public void setEndDate(final Date endDate) {
        this.endDate = endDate;
    }

}

现在,在我的代码中,我使用以下方法保存这个实体:

代码语言:javascript
复制
Calendar calendar = GregorianCalendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH, 31);
calendar.set(Calendar.MONTH, Calendar.OCTOBER);
calendar.set(Calendar.YEAR, 2017);
Date date = calendar.getTime();

TestEntity testEntity = new TestEntity();
testEntity.setEndDate(date);

Session session = sessionFactory.getCurrentSession();
session.save(testEntity);

如果我在Tomcat服务器上运行这段代码,它可以正常工作,并将日期保存为10/31/2017

现在,如果我在weblogic上运行相同的代码,上面的代码也会保存时间戳,比如- 10/31/2017 6:05:18 AM。这里我不想要时间戳,我只需要储存日期。

我已经启用了日志来查看hibernate生成的SQL查询,我不知道是什么导致了这个问题。

你能帮我一下吗?这个案子有什么问题吗?

我在这两台服务器中使用相同的hibernate Jars,并从这两台服务器指向Oracle数据库。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-27 10:59:07

若要使时间部分为零,请设置所有字段:

代码语言:javascript
复制
Calendar calendar = GregorianCalendar.getInstance(); // Now
calendar.set(2017, Calendar.OCTOBER, 31, 0, 0, 0); // y M d H m s

或者更好,打电话给calendar.clear();清除所有字段。

另外,在数据库中,确保它不是一个日期时间/时间戳,而是一个日期

顺便说一句: java.sql.Date (不是java.util.Date这里)是对时间部分的零。

还有新的java 8日期时间类,它们值得付出很大的努力。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46973159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档