我正在使用创建日期在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
答案 0 :(得分:9)
这与java.util.Date和java.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,看看是否能解决您的问题。