【问题标题】:Hibernate date don't save the milliseconds休眠日期不保存毫秒
【发布时间】:2011-09-06 06:09:25
【问题描述】:

我在休眠状态下保存了一个实体,并带有创建日期

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

在坚持方法之后,我有一个 01/06/2011 15:00:00.0 的记录 但是如果我进行了更新,我可以更改毫秒,所以数据库支持它.. 数据库是informix

【问题讨论】:

  • java.util.Date 相当古老和可怕。如果可以,请改为调查 Joda Time。它与休眠集成。 joda-time.sourceforge.net/contrib/hibernate/userguide.html
  • 我猜你的主要问题是你保存到的数据库列(不是日期 impl,我从来没有遇到过 java.util.Date 的问题)
  • 我怀疑这是一个休眠问题。底层数据库是什么?
  • 你的最后一句话是混乱和混乱的,我会编辑它,但如果我的解释是错误的,我不想把它搞砸。如果您能澄清您对所发生情况的描述,那将很有帮助。
  • 您使用的是哪个数据库?你确定你使用了正确的方言吗?

标签: java hibernate timestamp


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    这与 java.util.Datejava.sql.Timestamp 的记录行为一致

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

    如果您不想丢失第二个分数,并且不想调查替代日期库(例如前面提到的 Joda Time),您需要将该字段设为 java.sql.Timestamp,并使用当前日期的毫秒值构造初值

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

    【讨论】:

    • 你如何拥有实体?休眠不保存毫秒:S
    猜你喜欢
    • 2011-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    • 2012-12-26
    相关资源
    最近更新 更多