2009-06-23 11 views
1

注釈が実際にどのように機能するかはわかりません。同じクラスでJAXBとJPA(eclipselink付き)を使用しています。 e。複数のプロセッサの注釈をJavaクラスに入れることはできますか?

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "Channel") 
@Entity 
public class Channel extends NamedEntity { 
    @XmlAttribute 
    @XmlSchemaType(name = "anyURI") 
    @Column(name="url") 
    protected String url; 

    @XmlAttribute 
    @Column 
    protected String coDirection; 
    // etc... 
} 

今、私は(例えば通常ことを意味するだろう「[email protected]が知られているエンティティタイプではありません」奇妙なエラーを取得しています:私はこのようなクラス定義を取得しますクラスは私のpersistence.xmlに含まれていません)。注釈が互いに干渉するかどうかは疑問です。

答えて

3

注釈は、他の注釈、espに干渉することはできません。異なるパッケージから来て、異なる名前を持っている場合はそうではありません。各フレームワーク(JAXBとHibernate)には、独自のアノテーションがあります。各フレームワークは、それ自身のアノテーションのみをイントロスコープします。私はこれが問題ではないと確信しています。

これ持っているあなたのエンティティを確認してください。

a)は、引数のコンストラクタ(デフォルトコンストラクタは罰金ではありませんが、あなたは、引数を持つ唯一のコンストラクタを持っている場合、あなたはJPAに引数なしのコンストラクタを提供する必要があり、これを保護することができますがまたはパッケージの表示....フィールドまたはゲッター上)

b)は@Idアノテーション(私たちは常にフィールドベースのアノテーションを使用し、それ以外の種類のフィールド注釈付きJPAゲッター注釈を混ぜることはありません!)

c)のタイプは、あなたの持続性でありますユニットとあなたの永続性ユニットが

Dを使用している)タイプは、あなたが(NamedEntityを拡張)継承を使用する場合は、あなたがより多くのJPAにどのようにあなたは何にこれをマッピングするより多くの情報を与える必要があり@Entityアノテーションに

を持っています。まず、NamedEntityの拡張部分を削除しようとします。そして、継承バリアントについて説明する良いJPAチュートリアルを見てください。

+0

チェックリストの場合、これは一般的には非常に便利です。しかし、私が投稿する前に、私はすでにそれを研究していました。私はついにそれが私がまだ理解していないクラスローディングの問題であると考えましたが、とにかく解決することができました。私自身の答えも見てください。 –

0

いいえ、そうではありません。

私は他のすべての注釈を削除し、継承をカットし、非常に単純なクラスになってしまいました。問題は残った。

(私はそれが関連していないと思ったので)私の記事で言及されていなかった事は、私がのOSGiコンテナ(それが重要ならばフェリックス)内でこれを実行しているということでした。今では、そのようなコンテナは、異なる "束"を互いに遮蔽するので、パッケージを特に "エクスポート"するまで、お互いのクラスを見ることはできません。

注釈付きのクラスは私のpersistence.xmlのとは別のバンドルに座っていたと私はちょうど別のバンドルから注釈付きクラスをインポートし、他の場所で持続性のinitものを行うことができると仮定しました。私は本当に理由を理解していませんが、私はできません。

  • 注釈付きクラスとpersistence.xmlのは、このバンドルがエクスポート
  • 同じバンドルで一緒にいる:あなたはOSGiバンドルと一緒にJPAを使用している場合

    だから、あなたは、ことを確認する必要があります注釈付きクラス

  • 持続性ユニット(複数可)を含むパッケージをバンドルのマニフェストファイルにリストされてい

あなたは、耳鼻咽喉科を呼び出すような(実際の永続性のことを行うことができ、その後ityManager.persist)を別のバンドルにします。

バンドル全体にJAXB注釈を使用しようとすると、注意点として、私はsimilarly weird errorsを得ました。 JAXBContextおよび/またはObjectFactoryは、注釈付きクラスを含む同じバンドル内でインスタンス化する必要があるようです。私はこれを本当に釘付けにすることはできませんでしたが、同じバンドルに物を入れることは助けになりました。

OSGi、クラスの読み込み、注釈について深く理解している人が、ここで何が起こっているのかについてコメントできれば素晴らしいと思います。

更新:別のバンドル内のpersistence.xmlと注釈付きクラスを持つことができます可能性がある適切な注釈パッケージのインポート/エクスポートは、hereを参照してください。しかし、テストしていない。

関連する問題