休眠日期不会保存毫秒

时间:2011-06-01 12:16:48

标签: java hibernate timestamp

我正在使用创建日期在hibernate中保存实体         

    @Id
    @Column(name = "dtcreation")
    @Type(type="timestamp")
    private Date creation;
我在这个字段上添加了一个新日期:     
    entity.setCreation(new Date());
    entityDao.persist(entity);
但是当它保存在db上时,时间不包含毫秒,但是将其设置为0 如果我尝试用查询更新它的工作时间毫秒的值......有人可以帮助我吗?

在持久化方法之后,我有一个记录在01/06/2011 15:00:00.0 但如果我做了一个UPDATE我可以改变毫秒,所以db支持它.. 数据库是informix

2 个答案:

答案 0 :(得分:9)

这与java.util.Datejava.sql.Timestamp

的记录行为一致

java.util.Date存储到第二个,而java.sql.Timestamp是一个瘦包装器,以容纳SQL时间戳值的纳秒值。如果您阅读时间戳javadoc上的注释,它会清楚地说明这种差异。

如果您不想丢失第二部分,并且不想调查其他日期库(例如前面提到的Joda时间),则需要将该字段设为java.sql.Timestamp,并使用用于构造初始值的当前日期的毫秒值

java.util.Date date = new java.util.Date();
java.sql.Timestamp timestamp = new java.sql.Timestamp(date.getTime());
entity.setCreation(timestamp);

答案 1 :(得分:0)

如果没有您的代码进行测试,我很难明确回答,但是在查看java.sql.Timestamp的Javadoc时,看起来您正在混合类型并将该字段注释为时间戳。将java类型从Date更改为Timestamp,看看是否能解决您的问题。