1

JPA 1.0 (OpenJPA) に問題があります

次の状況

@Entity
public class A{
    private Long aId;
    private List<B> bEntities;
    //myId getter and setter
    @OneToMany(mappedBy="referencedA")
    public List<B> getBEntities(){
        return bEntities;
    }
    public void setBEntities(List<B> bEntities){
        this.bEntities = bEntities;
    }
}  

@Entitiy
public class B{
    private Long bId;
    private Long aId;
    private A referencedA;
    //aId/bId getter and setter
    @ManyToOne
    @JoinColumn(name="A_ID", referencedColumnName="A_ID")
    public A getReferencedA(){
        return referencedA;
    }
    public void setReferencedA(A referencedA){
        this.referencedA = referencedA;
    }
}  

次の JPQL-Query を実行すると、期待どおりに動作します。つまり、各属性が入力されます。

select object(o) from B o  

しかし、すべての As を取得したい場合:

select object(o) from A o  

そして、aReceivedAObject.getBEntities(); を介して B リストを取得しようとしました。null を返します。

OneToMany アノテーションを次のように変更または拡張すると、次のようになります。

@OneToMany(mappedBy="referencedA", fetch=FetchType.EAGER)  

すべてが期待どおりに機能します。

しかし、他のすべてが遅すぎるため、遅延フェッチが必要です。

私は今3日間問題に固執しているので、誰かが問題を解決するのを手伝ってくれることを本当に願っています:(

重要な場合のメモ:
OpenJPA 1.0 を使用する Websphere 6.1 (EJB 3.0 の Feature-Pack を含む) を使用 (する必要があります)。つまり、JavaEE プロジェクトです。
OpenJPA-Doc を理解している限り、拡張機能を有効にする必要があります。ここで説明したように行ったことhttp://www.ibm.com/developerworks/websphere/techjournal/0612_barcia/0612_barcia.html#sec4f
しかし、これは機能しません '違いがあるようです:(

前もって感謝します!!!
よろしく、
asotbb

//編集: タイプミスを修正: "public List getBEntities()" を "public List getBEntities()" に変更

4

2 に答える 2

0

そして、別のクラスから ADAL の findAll メソッドを呼び出します。

ええ、それはあなたの問題です。持続性を認識していない場合、ReceivedAObject.getBEntities() を遅延読み込みで動作させたい場合は、そのクラスに持続性コンテキストを認識させる必要があります。

ただし、エンティティ間でエンティティを手動でマージする必要があるため、あちこちに永続化コンテキストがあると、面倒になる可能性があります。もう 1 つの方法は、そのgetBEntities()メソッドをデータ アクセス層 (ADAL) でラップすることです。

于 2011-07-05T22:58:19.997 に答える