我使用@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数据库。
发布于 2017-10-27 10:59:07
若要使时间部分为零,请设置所有字段:
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日期时间类,它们值得付出很大的努力。
https://stackoverflow.com/questions/46973159
复制相似问题