How can I match the date from a java object to a database with Hibernate? I try different approaches, but I am not happy with them. What for? Let me explain my problem. I have the following class [1], including the main method that I call, and with the following mapping [2]. You can see a question about this approach when you look at the console output.
false
falsely
1
1
1224754335648
1224754335000
Thu Oct 23 11:32:15 CEST 2008
Watch @ 67064
As you can see, date dates are not exactly equal, although they should, so they are difficult to compare without resorting to the return getTime value. I also tried java.sql.Date, Timestamp and date instead of the timestamp in the mapping, but to no avail.
I wonder why the last three digits are zero, and if it is sleep mode or a problem with java or my own stupidity.
Thanks for reading.
[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; } }
[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>
source share