2013-04-12 34 views
10

我有一个表GameCycle在一个数据库中,其中包含number类型的列date。此列中的值是代表倒数日期的8位数字,如“20130301”。映射到这张桌子上,我有一个类GameCycle,它拥有一个java.util.Date类型的保护字段iDate。该字段使用自定义类型映射注释'@Type(type = "inverseDate")'。类Gamecycle标注有“@TypeDef(name = "inverseDate", typeClass = InverseDateType.class)jpa独立自定义类型映射/ javax.persistence.x替代org.hibernate.annotations.Type和org.hibernate.annotations.TypeDef

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实现,所以我的问题是:

有摆脱休眠注释的方式使用纯粹的javax.persistence解决方案进行相同的自定义类型映射?

回答

7

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

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

但在实践中几乎每一个大型的基于JPA的应用程序使用的持久性提供的一些具体实现的功能,因此我不认为避免在这种情况下Hibernate的依赖真正重要的。

+0

太糟糕了,我不得不怀疑,除了被绑定到一个实现的唯一的解决办法是一些转换在getters/setters中。尽管如此,感谢您的快速回答。 – tyler

20

定制类型映射已终于在JPA 2.1(,爪哇EE 7的一部分)加入。
的Hibernate的@Type注解不再需要,并且可以通过类型转换在JPA 2.1所取代。

JPA 2.1添加了:

最基本的例子:(实施例1:将一个基本行为弼) - from source

@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; 

} 

其他链接:

+0

这应该是JPA 2.1已经到达的公认答案。 –