繁体   English   中英

jpa独立自定义类型映射/ javax.persistence.x替代org.hibernate.annotations.Type和org.hibernate.annotations.TypeDef

[英]jpa independent custom type mapping / javax.persistence.x alternative to org.hibernate.annotations.Type and org.hibernate.annotations.TypeDef

我在db中有一个表GameCycle ,它包含类型为number的列date 此列中的值是8位数字,表示反向日期,如“ 20130301 ”。 映射到这个表上我有一个类GameCycle ,它包含一个java.util.Date类型的受保护字段iDate。 该字段使用自定义类型映射注释为“ @Type(type = "inverseDate") ”。 Gamecycle类注释为' @TypeDef(name = "inverseDate", typeClass = InverseDateType.class) '

import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef;

@Entity
@TypeDef(name = "inverseDate", typeClass = InverseDateType.class)
@Table(name = "GAMECYCLE")
public class GameCycle implements Comparable<GameCycle>, Serializable
{
    @Type(type = "inverseDate")
    @Column(name = "GC_DATE", nullable = false)
    protected Date iDate = null;
    ...

显然,导入将我绑定到使用hibernate作为jpa实现,所以我的问题是:

有没有办法摆脱hibernate注释并使用纯javax.persistence解决方案进行相同的自定义类型映射?

最终在JPA 2.1JSR-388 ,Java EE 7的一部分)中添加了自定义类型映射
不再需要Hibernate的@Type注释,可以用JPA 2.1中的Type Conversion替换。

JPA 2.1增加了:

最基本的例子:( 示例1:转换基本属性 ) - 来自源

@Converter
public class BooleanToIntegerConverter 
    implements AttributeConverter<Boolean, Integer> 
{  ... }

...

@Entity
@Table(name = "EMPLOYEE")
public class Employee
{

    @Id
    private Long id;

    @Column
    @Convert(converter = BooleanToIntegerConverter.class)
    private boolean fullTime;

}

其他链接:

当前版本的JPA规范不支持自定义类型映射。 这是未来JPA 2.1最受欢迎的功能之一。

如果你真的想摆脱Hibernate特定的annoations,你唯一能做的就是将你的字段映射为String并手动执行必要的转换(在getters / setters中)。

但实际上几乎每个基于JPA的大型应用程序都使用持久性提供程序的某些特定于实现的功能,因此我认为在这种情况下避免依赖Hibernate并不重要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM