【问题标题】:Java 8 + Hibernate 5 MySQL TIMESTAMP/DATETIME to LocalDateTime MappingJava 8 + Hibernate 5 MySQL TIMESTAMP/DATETIME 到 LocalDateTime 的映射
【发布时间】:2016-02-25 01:14:07
【问题描述】:

决定更新到 Hibernate 5 以删除现有的 Date 到 LocalDateTime 的转换。我从 Maven 安装了 hibernate-java8 工件。然后我将我的休眠实体日期时间替换为

@Column (name = "mis_a_jour_au", nullable = false)
@Temporal (TemporalType.TIMESTAMP)
private LocalDateTime misAJourAu;

@Column (name = "envoi_au", nullable = false)
@Temporal (TemporalType.TIMESTAMP)
private LocalDateTime envoiAu;

抛出了这个异常

org.hibernate.AnnotationException: @Temporal 只能在 java.util.Date 或 java.util.Calendar 属性上设置

如果我删除 @Temporal 则异常变为

ClassCastException:java.util.Date 无法转换为 java.time.LocalDateTime

我认为 Java 8 + Hibernate 5 支持 LocalDateTime?请指教。

【问题讨论】:

  • 我上次检查时,它只支持日期和日历。 docs.oracle.com/javaee/6/api/javax/persistence/Temporal.html
  • 您好,我正在使用 Java 8,并且我读到了这个:stackoverflow.com/a/32680455,它说在 hibernate-java8 工件中支持 LocalDateTime。我不太明白 hibernate 如何处理转换器以外的类型,所以我需要一些帮助
  • 糟糕,抱歉,没注意到这篇文章是旧文章
  • 很遗憾,我没有为你解答。但似乎 JPA 不支持 LocalDateTime。这是一篇(最近的)关于它以及如何解决它的文章。我希望这有助于thoughts-on-java.org/persist-localdate-localdatetime-jpa
  • 我目前正在使用此解决方法,但我想删除它,因为我看到了 Hibernate 5 中的 LocalDateTime 支持。无论如何,谢谢!

标签: java mysql hibernate hibernate-5.x


【解决方案1】:

只需删除该行: @Temporal (TemporalType.TIMESTAMP) 在每种情况下,您都定义它。

Hibernate 5 读取 LocalDateTime 作为类型,并将数据作为时间戳正确插入到数据库中。目前没有太多信息,因为他们发布了产品和文档。

【讨论】:

    【解决方案2】:
    @Column(name = "updated", columnDefinition="DATETIME")
    private LocalDateTime updated;
    
    @Column(name = "created", columnDefinition="TIMESTAMP")
    private LocalDateTime created;
    

    【讨论】:

      猜你喜欢
      • 2016-06-01
      • 1970-01-01
      • 2015-12-19
      • 2017-03-23
      • 2023-03-19
      • 2017-07-08
      • 2015-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多