hibernate - 实体中的本地日期时间在保存时忽略给定格式的最后 3 位数字
问题描述
我有一个定义如下的实体。我的是一个弹簧数据 jpa 应用程序。
我正在使用 Spring Boot 版本 1.5.4.RELEASE
当我使用 createDttm 从控制器调用服务时
cretDttm=2019-06-11T11:08:03.520808
它被保存/更新为 2019-06-11 11:08:03.520000。它正在丢弃本地日期时间的最后 3 位数字。任何修复相同的指针。
@Setter
@Getter
@NoArgsConstructor
@Entity
@ToString
@Table(name = "FOO")
public class Foo {
@Id
@GeneratedValue
@Column(name = "USER_ID")
private BigInteger userId;
@Column(name = "USER_NAME")
private String userName;
@Column(name = "CRET_DTTM", updatable = false)
private LocalDateTime cretDttm;
}
@SpringBootApplication
@EntityScan(basePackageClasses = {Application.class, Jsr310JpaConverters.class})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
更新:默认的 Jsr310JpaConverters.class 没有转换器来支持 java.sql.Timestamp。我创建了https://thoughts-on-java.org/persist-localdate-localdatetime-jpa/#highlighter_743982中提到的自定义转换器。注释与此处提到的JPA 无法反序列化 Java 8 LocalDateTime相同。它现在正在工作。谢谢你。
解决方案
下面的程序显示 LocalDateTime 保留到nanos
(9 位):
public static void main(String[] args) {
LocalDateTime dateTime = LocalDateTime.parse("2019-06-11T11:08:03.520808999");
System.out.println(dateTime.toString());
System.out.println(dateTime.getNano());
}
您可以检查您的数据库列类型,它是否保持millis
精度或更高?我怀疑您的数据库正在截断micro
粒度(6 位到 3 位)。如果您的数据库支持micros
和 ,请选择正确的数据类型nanos
。
推荐阅读
- json - 将 JSON 解析为 Access 表
- vba - 在 Outlook 中运行 VBA 宏时暂停/停止下载新电子邮件 [暂停/停止同步]
- c - 在 exec 函数中使用来自用户的字符串
- python - 显示 DataFrame 单元格的全部内容而不用省略号截断文本
- javascript - 为什么我的组件的这一部分会在间隔调用时重新呈现?
- android - ObjectAnimator 使 imageview 消失
- javascript - 如何使用 JavaScript 从 fetch 返回一个数组
- r - 如何从强制下载的链接下载文件
- java - 在对象类型与静态类型之间进行序列化时的性能差异
- git - 使用 kdiff3 来“保存部分合并”,留下(或添加?)未解决的冲突标记