Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 对Joda DateTime的JPA映射支持_Hibernate_Jpa_Orm_Entity_Persistence - Fatal编程技术网

Hibernate 对Joda DateTime的JPA映射支持

Hibernate 对Joda DateTime的JPA映射支持,hibernate,jpa,orm,entity,persistence,Hibernate,Jpa,Orm,Entity,Persistence,有没有像hibernate@Type那样的javax持久性注释 @LastModifiedDate @Column(name = "LAST_MODIFIED_DATE") @Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime") private DateTime lastModifiedDate = DateTime.now(); 或者是否有其他方法可以摆脱hibernate@Type注释。仅仅删除它就会从

有没有像hibernate@Type那样的javax持久性注释

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

或者是否有其他方法可以摆脱hibernate@Type注释。仅仅删除它就会从数据库中抛出二进制过长异常。

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

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

在JPA2中,解决方案是使用自定义JPA转换器,将jodatime值转换为Java.sql.Date值。下面是一篇关于映射新的Java 8日期时间类型的gret博客文章,这些类型基本上是Java 8库中标准化的jodatime类型:


对于JPA1,不支持现成的转换器,您可以使用特定于JPA实现的转换器(例如hibernate)或者使用PostLoad和Preupdate侦听器将jodatime字段临时化并将其编码/解码到另一个日期字段

您永远无法完全摆脱特定于Hibernate的状态,因为jodatime不在JPA规范中。。。是的,您可以指定持久性属性,但它们是Hibernate持久性属性,因此无法与其他Provider一起使用。JPA 2(Java EE 7)可以使用自定义转换器。这似乎是errm、jpa2.1实际上是AttributeConverterGood答案的重复,但请注意,这不是标准的JPA属性,可能只有hibernate支持