2013-04-12 13 views
10

numberの列dateを保持するdb内にテーブルGameCycleがあります。この列の値は、 '20130301'のような逆の日付を表す8桁の数字です。このテーブルにマップされた私はjava.util.Dateタイプの保護フィールドiDateを保持するクラスGameCycleを持っています。そのフィールドにはカスタムタイプマッピングを使用して '@Type(type = "inverseDate")'という注釈が付けられます。クラスGamecycleは明らかに「@TypeDef(name = "inverseDate", typeClass = InverseDateType.class)独立型カスタム型マッピング/ 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; 
    ... 

でアノテートされ、輸入は私の質問があるので、JPAの実装として、休止状態使用に私をバインドします

休止状態の注釈を取り除く方法はありますし、純粋なjavax.persistenceソリューションを使用して同じカスタムタイプのマッピングを行いますか?

答えて

7

現在のバージョンのJPA仕様では、カスタムタイプのマッピングがサポートされていません。将来のJPA 2.1で最も必要とされる機能の1つです。

実際にHibernate固有のアノテーションを取り除きたい場合は、フィールドをStringとしてマップし、必要な変換を手作業で(ゲッター/セッターで)実行するだけです。

実際、ほとんどすべての大規模なJPAベースのアプリケーションでは、永続性プロバイダの実装固有の機能がいくつか使用されているため、この場合はHibernateへの依存を避けることが重要です。

+0

あまりにも悪い、私は実装に縛られること以外の唯一の解決策は、いくつかの変換であろうと疑われていましたゲッター/セッターで。しかし、迅速な答えをありがとうございます。 – tyler

20

カスタム・タイプ・マッピングは、最終的にJPA 2.1(、のJava EE 7の一部)に追加されています。
Hibernateの@Type注釈はもはや必要なくなり、JPA 2.1のタイプ変換に置き換えることができます。

JPA 2.1を添加した:

最も基本的な例:(例1:変換基本的なattriビュート) - 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が到着した時点で受け入れられる回答になるはずです。 –

関連する問題