gpt4 book ai didi

java - @Temporal 未按预期工作

转载 作者:行者123 更新时间:2023-11-30 02:20:35 24 4
gpt4 key购买 nike

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

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;
}

}

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

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 数据库。

最佳答案

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

Calendar calendar = GregorianCalendar.getInstance(); // Now
calendar.set(2017, Calendar.OCTOBER, 31, 0, 0, 0); // y M d H m s

或者也许更好,调用calendar.clear();来清除所有字段。

此外,在数据库中确保它不是 DATETIME/TIMESTAMP,而是 DATE

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

<小时/>

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

关于java - @Temporal 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46973159/

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