2012-04-19 7 views
2

JPAで遅延をフェッチするように設定されたコレクションを取得できないという問題があります。ここでは、エンティティが定義されているか、次のとおりです。JPAでの問題が遅延読み込みコレクションをロードしない

レポートエンティティ

//bi-directional many-to-one association to Host 
@OneToMany(mappedBy="report", cascade=CascadeType.ALL, fetch=FetchType.LAZY) 
private Set<Host> hosts; 

私はホストがメモリとホストにロードするように設定を取得することはできませんいくつかの理由

//bi-directional many-to-one association to Report 
@ManyToOne 
@JoinColumn(name="INCIDENT_ID") 
private Report report; 

ホストエンティティは常にnullです。上記から

public void loadHosts(Report report) 
{ 
    PersistenceUtil unitUtil = getEntityManager().getEntityManagerFactory().getPersistenceUnitUtil(); 
    System.out.println("isLoaded(report, \"hosts\"): " + unitUtil.isLoaded(report, "hosts")); 
    initializeCollection(report.getHosts()); 
    System.out.println("isLoaded(report, \"hosts\"): " + unitUtil.isLoaded(report, "hosts")); 
} 

private void initializeCollection(Collection<?> collection) 
{ 
    if(collection == null) 
    { 
     return; 
    } 
    collection.iterator().hasNext(); 
} 

出力:

SystemOut  O isLoaded(report, "hosts"): false 
SystemOut  O isLoaded(report, "hosts"): false 

に任意のアイデアを、私はStackOverflowのポストに、次の見つけましたが、それは動作しませんか?

答えて

0

getHostsをsession.get(object)とtx.commitの間で呼び出す必要があると思います。または、fetch = FetchType.EAGERの使用を決定することもできます(ただし、それは適切ではありません)

+0

この場合、データベースから既存のレポートを読み込みます。レポートおよび関連ホストは、これらのエンティティを使用してデータベースに書き込まれました。私はreport.getHosts()を呼び出そうとしましたが、上のコードの行でそれをやっています:initializeCollection(report.getHosts()); – bnorwood

+0

申し訳ありませんが、私はその行を逃しました。 –

+0

fetchtype.eagerは依然として役立つでしょうか? –

関連する問題