我使用@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数据库。
答案 0 :(得分:2)
要将时间部分设为零,请设置所有字段:
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日期时间类,值得付出巨大的努力。