mae*_*rch 4 java hibernate date
如何使用 Hibernate 将日期从 java 对象映射到数据库?我尝试不同的方法,但我对它们不满意。为什么?让我解释一下我的问题。我有以下类 [1],包括我调用的主要方法和以下映射 [2]。当您查看控制台输出时,您可以看到有关此方法的问题。
错误的
错误的
1
-1
1224754335648
1224754335000
2008 年 10 月 23 日星期四 11:32:15 欧洲中部夏令时间
时钟@67064
正如您所看到的,截止日期并不完全相等,尽管它们应该相等,因此很难在不使用返回值的情况下比较它们getTime。我还尝试了 java.sql.Date、时间戳和日期而不是映射中的时间戳,但没有成功。
我想知道为什么最后三位数字为零,这是休眠还是java问题还是我自己的愚蠢。
感谢您的阅读。
[1]
public class Clock {
int id;
java.util.Date date;
public static void main(String[] args) {
HibernateUtil.init();
HibernateUtil.getSessionFactory().getCurrentSession().beginTransaction();
Clock clock = new Clock();
clock.date = new java.util.Date();
HibernateUtil.getSessionFactory().getCurrentSession().saveOrUpdate(clock);
HibernateUtil.getSessionFactory().getCurrentSession().getTransaction().commit();
HibernateUtil.getSessionFactory().getCurrentSession().beginTransaction();
Clock fromDBClock = (Clock)HibernateUtil.getSessionFactory()
.getCurrentSession().get(Clock.class, 1);
System.out.println(clock.date.equals(fromDBClock.date));
System.out.println(fromDBClock.date.equals(clock.date));
System.out.println(clock.date.compareTo(fromDBClock.date));
System.out.println(fromDBClock.date.compareTo(clock.date));
System.out.println(clock.date.getTime());
System.out.println(fromDBClock.date.getTime());
System.out.println(clock.date.toString());
System.out.println(fromDBClock.toString());
HibernateUtil.getSessionFactory().getCurrentSession().getTransaction().commit();
HibernateUtil.end();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public java.util.Date getDate() {
return date;
}
public void setDate(java.util.Date date) {
this.date = date;
}
}
Run Code Online (Sandbox Code Playgroud)
[2]
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Clock" table="CLOCK">
<id name="id" column="CLOCK_ID">
<generator class="native"/>
</id>
<property name="date" type="timestamp"/>
</class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)
MySql DateTime 精度仅为秒。Java 日期精度为毫秒。这就是为什么在放入数据库后最后三位数字为零的原因。
对您的原始日期执行此操作:
日期 = date.setTime((date.getTime() / 1000) * 1000);
这会将其设置为最后一秒,然后所有比较都将匹配。
(顺便说一句,System.out.println(fromDBClock.toString());应该是System.out.println(fromDBClock.date.toString());
| 归档时间: |
|
| 查看次数: |
4872 次 |
| 最近记录: |