【问题标题】:JPA mapping support for Joda DateTimeJoda DateTime 的 JPA 映射支持
【发布时间】:2015-11-15 19:40:03
【问题描述】:

有没有类似hibernate@Type的javax持久化注解

@LastModifiedDate
@Column(name = "LAST_MODIFIED_DATE")
@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime")
private DateTime lastModifiedDate = DateTime.now();

或者还有其他方法可以摆脱休眠@Type 注释。只是删除它会从数据库中引发二进制太长的异常。

【问题讨论】:

  • 由于 JodaTime 不在 JPA 规范中,因此您永远无法完全摆脱特定于 Hibernate 的限制……是的,您可以指定持久性属性,但它们是 Hibernate 持久性属性,因此无法与其他提供者一起使用
  • JPA 2 (Java EE 7) 可以使用自定义转换器。这似乎是 stackoverflow.com/questions/9783577/… 的副本
  • errm,实际上是 JPA 2.1,AttributeConverter

标签: hibernate jpa orm entity persistence


【解决方案1】:

是的,你可以。只需在persistence.xml 中设置以下 JPA 属性:

<property name="jadira.usertype.autoRegisterUserTypes" value="true"/>

【讨论】:

  • 好答案,但请注意,这不是标准的 JPA 属性,可能只有 hibernate 支持
【解决方案2】:

在 JPA 2 中,解决方案是使用自定义 JPA 转换器,它将 jodatime 值转换为 Java.sql.Date 值。这是一篇关于映射新的 Java 8 日期时间类型的精彩博文,这些类型基本上是 Java 8 库中标准化的 jodatime 类型:https://weblogs.java.net/blog/montanajava/archive/2014/06/17/using-java-8-datetime-classes-jpa

使用 JPA 1,不支持开箱即用的转换器,您可以使用特定于您的 JPA 实现的转换器(例如休眠),或者使用使 jodatime 字段瞬态并将其编码/解码为另一个 Date 字段PostLoad 和 Preupdate 监听器

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 2017-10-21
    • 2013-11-14
    • 1970-01-01
    • 2021-09-17
    • 2015-09-23
    • 1970-01-01
    相关资源
    最近更新 更多