【问题标题】:Error saving LocalDateTime in TIMESTAMP在 TIMESTAMP 中保存 LocalDateTime 时出错
【发布时间】:2018-01-23 23:26:39
【问题描述】:

我正在使用 Java 8Hibernate 5.2.9 我有一个包含变量 end 的对象

@Column(name = "end", nullable = false, columnDefinition = "TIMESTAMP")
private LocalDateTime end;

在数据库中该字段定义为

`end`        TIMESTAMP    NOT NULL

所以当我尝试这样做时

sessionFactory.getCurrentSession().save(object);

我明白了

Caused by: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Incorrect datetime value: '\xAC\xED\x00\x05sr\x00\x0Djava.time.Ser\x95]\x84\xBA\x1B"H\xB2\x0C\x00\x00xpw\x0E\x05\x00\x00\x07\xE1\x08\x0F\x13\x1E\x13\x1C1h@' for column 'end' at row 1

不确定我到底做错了什么,因为我假设 java 8 和 hibernate 5.2.9 知道 LocalDateTime 是什么。我很感激任何帮助,因为我被困住了。

【问题讨论】:

  • this 示例解释了 java 8 对 LocalDateTime 的 hibernate 5 支持。它可能会有所帮助。
  • @RajithPemabandu 那篇文章指出我所拥有的应该可以正常工作。然而它似乎不知何故没有,我不知道为什么。

标签: java mysql hibernate hibernate-mapping sql-timestamp


【解决方案1】:

我认为问题在于您使用了两种不同的日期类型。

TIMESTAMP -: '1970-01-01 00:00:01' UTC

LocalDateTime -: 2017-08-16T05:22:23.832`

使用一个Date甲酸盐

【讨论】:

  • 我该怎么做呢? LocalDateTime 是一个原生 Java 对象
  • 你要保存的格式是什么。 2017-08-16T05:22:23.832 这个或2017-08-15 03:14:07 这个或任何其他格式
  • 使用这个注解@Temporal(TemporalType.TIMESTAMP)
  • 这给了我@Temporal should only be set on a java.util.Date or java.util.Calendar property
  • import javax.persistence.Temporal import javax.persistence.TemporalType @Column(name = "end", nullable = false) @Temporal(TemporalType.TIMESTAMP) private 日期结束;
猜你喜欢
  • 2018-09-30
  • 2014-11-28
  • 2020-06-13
  • 1970-01-01
  • 2014-03-23
  • 1970-01-01
  • 2018-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多