当前位置: 首页 > 知识库问答 >
问题:

实体中的本地日期时间在保存时忽略给定格式的最后3位数字

郎宏逸
2023-03-14

我有一个定义如下的实体。Mine是一个Spring数据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无法反序列化Java8 LocalDateTime。它现在正在工作。谢谢你。

共有1个答案

施默
2023-03-14

下面的程序显示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());
}

您能检查一下您的数据库列类型,它是否能保持到< code >毫秒精度或更高?我怀疑您的数据库截断了< code>micro粒度(6位数比3位数)。如果您的数据库支持< code>micros和< code>nanos,请选择正确的数据类型。

 类似资料:
  • 问题内容: 如何保存hibernate实体并忽略(不正确)瞬态模式。 例如: 我想保存它: 弹簧产生错误: 问题答案: 参见http://docs.jboss.org/hibernate/validator/4.2/reference/en- US/html_single/#validator-checkconstraints- orm 。默认情况下,Hibernate(ORM)检查默认验证组的每

  • 问题内容: 如何保存休眠实体并忽略(不正确)瞬态模式。 例如: 我想保存它: 弹簧产生错误: 问题答案: 参见http://docs.jboss.org/hibernate/validator/4.2/reference/en- US/html_single/#validator-checkconstraints- orm 。默认情况下,Hibernate(ORM)检查默认验证组的每个约束。因此,

  • 问题内容: 我正在尝试将一个实例转换为一个实例。 我没有得到编译器错误,但是实例值是错误的。 我认为这不起作用,因为它存储时间而不是。 我正在使用JDK 1.8版。 问题答案: 您的输入实际上是一个。简单地将其解析为a 然后从中获取会更简单。无需担心时区,无需保留某些传统课程(避免并在可能的情况下…)

  • 我有一个文件,可以有日期修改值与日期或日期时间的格式。我曾将该值解析为: 现在,字符串也可以是

  • 问题内容: 我需要改变从一个日期/时间 2014年8月20日15:30:00 看起来像 二○一四年八月二十○日下午3:30 可以使用javascript的Date对象完成此操作吗? 问题答案: 是的,您可以使用本地javascript Date() 对象 及其方法。 例如,您可以创建一个类似以下的函数: 并显示上午/下午和正确的时间。 请记住使用 getFullYear() 方法,而不要使用get

  • 下表显示可用于为图表中的日期时间字段创建用户定义的数据格式的说明符。 说明符 描述 D 将日显示为不带前导零的数字(1-31)。 DD 将日显示为带前导零的数字(01-31)。 M 将月份显示为不带前导零的数字(1-12)。 MM 将月份显示为带前导零的数字(01-12)。 MMM 将月份显示为缩写形式(Jan-Dec)。 MMMM 将月份显示为完整月份名(January-December)。 Y