質問

私はタイプjavax.xml.datatype.Durationのあるクラスのプロパティフィールドを持っています。これは、基本的に(例えば、4時間34分)期間を表します。

JPAは私に言っている、それは私に衝撃を与えていない無効なタイプです。

をいただきました!良い解決策この?私は私自身の期間クラスを実装することができますが、私はデータ型としてそれを「受け入れる」にJPAを取得する方法を知りません。

役に立ちましたか?

解決

  

をいただきました!良い解決策この?私は私自身の期間クラスを実装することができますが、私はデータ型としてそれを「受け入れる」にJPAを取得する方法を知りません。

あなたはこの道を行くにしたい場合は、あなたのプロバイダからJPA拡張を使用する必要がありますので、

JPAは、カスタムタイプをサポートしていません。例えば、Hibernateはを定義することができカスタム値型を使用すると、 @Type をA>。明らかに、これが問題になることがありますプロバイダ間の移植性を害するます。ない場合は、それはなんとかです知っています。

は、標準JPAと、伝統的なアプローチは、問題の性質を適合させる別のゲッター/セッターのペアを追加して、アクセスされたときに変換を実行することであろう。私は時間を保存するためにLongを使用することになります:

public MyEntity implements Serializable {
    private Long id;
    private javax.xml.datatype.Duration duration;

    @Id
    @GeneratedValue
    public Long getId() {
        return this.id;
    }
    public void setId(Long id) {
        this.id = id;
    }

    @Transient
    public Duration getDuration() {
        return this.duration;
    }
    public void setDuration(Duration duration) {
        this.duration = duration;
    }

    public Long getDurationAsJpaCompatibleType() {
        return MyXmlUtil.convertDurationToLong(this.duration);
    }
    public void setDurationAsJpaCompatibleType(Long duration) {
        setDuration(MyXmlUtil.convertLongToDuration(duration));
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top