java - 使用 Hibernate 将 java.util.Date 持久化到 MySql 中时出现问题

标签 java mysql hibernate datetime

过去几个小时我一直在调试这个问题,但没有成功,我想我应该把它扔给 SO,看看结果如何。

我正在开发一个 Java 程序,该程序使用 Hibernate 和 DAO/DTO 模式将数据保存到 MySql 数据库中。在我的数据库中,我有一个包含 firstLoginDate 列的 memberprofile 表。在数据库中,该列的 SQL 类型是 DateTime。 Hibernate XML文件的对应部分是

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

但是,当我尝试将 Date 保存到该表中时(在 Java 中),“日期”(年/月/日)部分会正确保留,但“时间”部分(小时:分钟:秒)不是。例如,如果我尝试保存一个代表 2009-09-01 14:02:23 的 Java 日期,数据库中最终出现的是 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 几乎是 DTO 的包装类;设置首次登录日期设置 DTO 的一个字段,然后提交更改。


编辑 2: 它似乎只发生在我的机器上。我已经尝试重建表架构并清除所有本地源并从 CVS 重新 check out ,但没有任何改进。现在我真的很困惑。


编辑 3:完全删除我的 MySql 安装,重新安装它,并从已知良好的副本恢复数据库也没有解决问题。

最佳答案

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

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

我的数据库将列定义显示为日期时间。

编辑:

还有一些事情要检查...

  • 检查mysql驱动是否相同 在您的本地和工作机器上。
  • 尝试放下 table ,然后 hibernate 为你重新创建它。如果 那行得通,然后有一个问题 映射。

关于java - 使用 Hibernate 将 java.util.Date 持久化到 MySql 中时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1364397/

相关文章:

java - 如何在使用if条件的同时提高代码标准?

MySql:多个查询从不同表中选择一列

php - MySql PDO 和第二级内部过程调用中抛出的异常

java - cvc-complex-type.2.4.c : The matching wildcard is strict, 但找不到元素 'tx:annotation- driven' 的声明

java - 初学者 hibernate/spring/hibernate-search 问题(配置)

java - 在JPA中设置不同实体的字段

java - 将基于 JOIN 的聚合查询结果映射到 Hibernate 属性

java - 显示我的 GET 端点的特定 JSON 响应

java - 在网站上动态显示二维码(无需先保存)(Java)

php - 如何加密现有的MySQL数据库?