2010-11-26 7 views
2

私はEclipseLinkの世界では比較的新しいですが、私はドキュメントを読んできましたが、次の表を表現しようとすると本当に問題があります。次のようにEclipseLinkアノテーションを定義する方法は?

PTY_NO | REF_OBG 
6544  45663 
6544  1234 
6544  97543 
6544  1123 
6544  77897 

理想的には、上記のデータを次のように表したいと思います。

@Entity 
@Table(name="FCS_ISSR_OBG") 
public class fcs_issr_obg implements Serializable { 

    @Id 
    @Column(name="PTY_NO") 
    private long pty_no; 

    @Column(name="REF_OBG") 
    private List<long> ref_obg; 

... 

この形式のデータを取得すると、クラスをシリアライズしてCoherenceキャッシュに入れることを計画しています。

私が使用した注釈が実際にコンパイルされません。しかし

...

ありがたく受け取ることになるすべてのヘルプ。

は..私はこれまで

ある
@Entity 
@Table(name="FCS_ISSR_OBG") 
public class fcs_issr_obg implements Serializable, PortableObject { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @Column(name="PTY_NO") 
    private long pty_no; 

    @ElementCollection(targetClass = Long.class, fetch = EAGER) 
    @CollectionTable(
      name = "FCS_ISSR_OBG", 
      [email protected](name="PTY_NO") 
      ) 
    @Column(name ="REF_OBG") 
    private List<Long> collection; 

を思い付くことができた

最高を更新しかし、これは2つのクエリになり...私が後だよ本当にされていません。

乾杯 リッチ

+0

は、多対多のテーブルを結合するこのですか? –

+0

プライマリキーがない1つのテーブルです。したがって、テーブル内のマッピングは1対多のものになります。 – Rich

+0

OK、もう一度見てみましょう... –

答えて

2

が、別のクエリでコレクションを読み、データに応じた最適なソリューションかもしれません。

また、関係をフェッチバッチにEclipseLinkの中で(まだ2クエリではなく、N + 1クエリー)@BatchFetch使用することができます。私は、バッチの比較を行なったし、最近、私のブログに結合フェッチ、参照、

http://java-persistence-performance.blogspot.com/

+0

これはありがとう、私は仕事に着くときにそれを試してみてください。 – Rich

+0

それはすばらしいジェームスです。ニースのブログ記事も。あなたとゲーリーの両方がこの2部構成の質問への回答を寄せてくれました。 – Rich

2

私はこれをテストすることができていませんでした、おそらく組み込み可能なオブジェクトを導入することは、クエリの数を減らすことができます。このような何か:組み込み可能と

@Entity 
@Table(name = "FCS_ISSR_OBG") 
public class FCS_ISSR_OBGDto implements Serializable { 

    @Column(name = "PTY_NO", nullable = false) 
    private Long pty_no; 

    private List<REF_OBGDto> REF_OBGs = new ArrayList<REF_OBGDto>(); 

    @ElementCollection 
    @CollectionTable(name = "FCS_ISSR_OBG", joinColumns = @JoinColumn(name = "PTY_NO")) 
    @Column(name = "REF_OBG") 
    public List<REF_OBGDto> getREF_OBGs() { 
    return REF_OBGs; 
    } 
} 

この

@Embeddable 
@Table(name = "FCS_ISSR_OBG") 
public class REF_OBGDto { 

    @Column(name = "REF_OBG") 
    public Long ref_obg; 

} 

のように見えるあなただけが特にそれを求めるのコレクションを取得します。弱い答えに申し訳ありませんが、私はここでテストできるものに限られています。 @JoinFetch注釈はEclipseLinkのに使用することができ、親クエリでフェッチする任意の関係を強制的に

+0

ありがとうございました。私の編集でわかるように、似たような解決策を思いついたようです。 – Rich

+0

ドキュメンテーション(2.2.5.3.3項)を見ると、何か良いものがあれば分かりません(http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity-マッピングアソシエーション)。おそらく、より良い答えが出てくるまで2クエリーのバージョンを進めるのが最善でしょう。 –

+0

私はあなたが正しいと思う、あなたの助けをありがとう。 – Rich

関連する問題