java - 数据库中的持久化日期不等于检索日期

标签 java mysql hibernate

我有一个简单的实体类,它有一个 Date 属性。此属性对应于 MySQL 日期时间列。

@Entity
public class Entity {

    @Column(name = "start_date")
    @Temporal(TemporalType.TIMESTAMP)
    private java.util.Date startDate;

}

这是我编写的集成测试的样子:

java.util.Date now = new java.util.Date();
Entity entity = new Entity();
entity.setStartDate(now);
entityService.save(entity); // save entity to database
entity = entityService.get(entity.getId()); // get entity back from database
Assert.assertEquals(entity.getStartDate(), now);

我希望这两个日期相等,但事实并非如此!实际上,我有:

now.getTime() = 1350160029831
entity.getStartDate().getTime() = 1350160029000

所以这两个日期之间有一个小差距。我真的很想知道这种差距可能来自哪里。它并不总是相同的,每次我开始测试过程时都会有所不同。 在我的数据库中,存储的日期是 2012-10-13 22:15:38.0。

我真的需要在某处清除毫秒数吗?

最佳答案

来自MySQL documentation :

A DATETIME or TIMESTAMP value can include a trailing fractional seconds part in up to microseconds (6 digits) precision. Although this fractional part is recognized, it is discarded from values stored into DATETIME or TIMESTAMP columns. For information about fractional seconds support in MySQL, see Section 11.1.5.6, “Fractional Seconds in Time Values”.

请注意,无论如何您都不应该使用 equals 来比较日期,因为各种 Date 子类都有错误的实现,这会导致诸如 a.equals(b) && !b.equals(a):

java.util.Date d1 = java.sql.Date.valueOf("2012-01-01");
java.util.Date d2 = new java.util.Date(d1.getTime());
java.util.Date d3 = new java.sql.Timestamp(d1.getTime());

System.out.println(d1.equals(d2)); // true
System.out.println(d2.equals(d1)); // true
System.out.println(d1.equals(d3)); // true
System.out.println(d3.equals(d1)); // false
System.out.println(d2.equals(d3)); // true
System.out.println(d3.equals(d2)); // false

关于java - 数据库中的持久化日期不等于检索日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12876726/

相关文章:

mysql - 批量过程调用 Node MySQL

spring - Spring Cache Abstraction 和 Hibernate EHCache 哪个最好?

java - Wicket 口 boolean 模型

java - 尝试加载 tflite 模型失败并出现 java.io.FileNotFoundException - 我做错了什么?

Mysql 多个 COUNT 和 join

java - 从 Criteria 获取 SQL

java - 如何在 hibernate 中使用子查询到 "from"子句?

java - 表示节点之间路径长度的数据结构?

java - Tomcat 部署失败和旧的 webapp

php - 用 php mysql 填充一个选择框