代码之家  ›  专栏  ›  技术社区  ›  Matt Ball

持久化问题java.util.Date文件在MySql中使用Hibernate

  •  3
  • Matt Ball  · 技术社区  · 15 年前

    我正在开发一个Java程序,使用Hibernate和DAO/DTO模式将数据持久化到MySql数据库中。在我的数据库里,我有一个 memberprofile 带有 firstLoginDate 列。在数据库中,该列的SQL类型是DateTime。Hibernate XML文件的相应部分是

    <property name="firstLoginDate" type="timestamp">
        <column name="firstLoginDate" sql-type="DATETIME"/>
    </property>
    

    Date 2009-09-01 14:02:23 2009-09-01 00:00:00 .

    我已经确认了我自己的代码没有在时间组件上跺脚;就我所能看到的源代码(调试时)而言,时间组件仍然是正确的。但是,在提交更改之后,我可以使用MySql查询浏览器检查相关的行(或者只是在Java代码中从数据库中抓回),而且确实缺少时间组件。有什么想法吗?

    我试着坚持 java.sql.Timestamp java.util.Date ,但问题依然存在。另外,我在另一个表中有一个非常类似的列,它根本不显示这种行为。


    编辑@Nate:

    ...
    MemberProfile mp = ...
    Date now = new Date();
    mp.setFirstLoginDate(now);
    ...
    

    MemberProfile


    编辑2: 这似乎只发生在我的机器上。我已经尝试过重建表模式,删除所有本地源代码,并从CVS中重新签出,但没有任何改进。现在我真的被难住了。


    编辑3:

    4 回复  |  直到 15 年前
        1
  •  1
  •   Jesse    15 年前

    我的设置与您类似(除了我的工作),我的映射文件如下所示:

    <property name="firstLoginDate" type="timestamp">
        <column name="firstLoginDate" length="19"/>
    </property>
    

    我的数据库将列定义显示为datetime。

    • 检查mysql驱动程序是否相同 在你的地方就像在工作的机器上一样。
    • 试着把桌子放下,然后 休眠为您重新创建它。如果 如果成功了,那就有问题了 地图。
        2
  •  0
  •   aperkins    15 年前

    除此之外,通过我们的注释配置,它看起来如下所示:

    @Column(name="COLUMN_NAME", length=11)
    
        3
  •  0
  •   Krumpi    14 年前

    如果对您来说是可行的,请考虑使用 JodaTime

    使用它们,我用自定义Hibernate类型的注释将我的字段或getter标记为:

    @org.hibernate.annotations注释.Type(类型=“”org.joda.time公司.contrib.hibernate.PersistentDateTime") @列(name=“date”)

    这对我来说很好,它还生成了正确的模式生成sql

        4
  •  -1
  •   Pascal Thivent    14 年前

    请检查下面的例子。

    @Temporal(TemporalType.TIMESTAMP)
    public Date getCreated() {
        return this.created;
    }