java - Hibernate 5.3,坚持 java.time.* 截断到微秒

标签 java spring hibernate java-time

我使用 Spring JPA 和 Hibernate 5.3 创建了一个 Spring Boot 2.x 应用程序。我正在使用 MySql 5.7。由于“我的数据库”中的“日期时间”列具有 6 位精度,因此我想在将值存储在数据库中之前将应用程序中的日期截断为微秒。

事实上,如果我不这样做,当我有一个像 2020-01-31T22:59:59.999999999Z 这样的日期时,在 MySql 中将被持久化为 2020-01 -31T23:00:00.000000Z 当然我不想要这个!

我在我的应用程序中使用 java.time.Instant。我正在寻找一种巧妙的方法来为整个应用程序完成此任务。 我很矛盾是否使用自定义 Hibernate 类型或其他类型。我想要一些提示来指引我正确的方向。

最佳答案

truncatedTo()

当您知道时,这很容易:使用您正在使用的日期时间类的 truncatedTo 方法(可能是 InstantOffsetDateTime)。例如:

    Instant pointInTime = Instant.parse("2020-01-31T22:59:59.999999999Z");
    System.out.println("Original instant:          " + pointInTime);
    Instant truncated = pointInTime.truncatedTo(ChronoUnit.MICROS);
    System.out.println("Truncated to microseconds: " + truncated);

输出是:

Original instant:          2020-01-31T22:59:59.999999999Z
Truncated to microseconds: 2020-01-31T22:59:59.999999Z

不过,它不会在您的应用程序中自动运行。

链接:Documentation of Instant.truncatedTo

关于java - Hibernate 5.3,坚持 java.time.* 截断到微秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58172984/

相关文章:

java - 由于架构验证,Spring Boot 项目无法运行 : missing sequence [hibernate_sequence]

java - 我无法弄清楚扫雷递归算法

java - 为什么相机的实时预览旋转90度?

java - 为什么java允许在匿名内部类中重新分配类级变量,而局部变量则不允许

java - 出现错误时如何继续处理项目?

Spring 4 - 拒绝所有端点的 "null"@RequestBody

java - 在单个服务器中部署多个 Spring Boot Web 应用程序

java - 了解在 Tomcat 上部署的应用程序的 Spring 框架中使用 AspectJ 进行加载时编织

oracle - Hibernate 统计日志记录

java - 我的查询在带有索引的 hibernate 中花费了太多时间