一尘不染

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

hibernate

GameCycle在db中有一个表,其中包含datetype 列number。此列中的值是8位数字,代表一个反日期,例如’
20130301‘。映射到此表上,我有一个类GameCycle,其中包含一个类型为iDate的受保护字段java.util.Date。该字段@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解决方案进行相同的自定义类型映射?


阅读 573

收藏
2020-06-20

共1个答案

一尘不染

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

如果您真的想摆脱特定于Hibernate的注释,您唯一可以做的就是将字段映射为,String并手动执行必要的转换(在getter / setter中)。

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

2020-06-20