クエリオブジェクトのclose()メソッドを使用するときに明確なドキュメントが見つかりませんでした。次の例では、リソースを含むtryは、Autocloseable.close()を呼び出してPersistenceManagerとQueryを閉じます。内部的にQuery.close()を呼び出すと、返されたすべての結果を閉じるQuery.closeAll()が呼び出されます。クエリオブジェクトのために必要なJDO DataNucleusを使用するタイミングQuery.close()
Collection<Object> returnedEntities = new ArrayList<>();
Transaction tx = null;
try (PersistenceManager pm = DataStore.getInstance().getPM();
Query< Object>query = pm.newQuery(Object.class);) {
tx = pm.currentTransaction();
tx.begin();
query.setOrdering(<ordering>);
query.setFilter(<some filters go here>);
query.declareParameters(<parameterType>);
returnedEntities = (Collection<Object>) query.execute(<parameterValue>);
returnedEntities = pm.detachCopyAll(returnedEntities);
tx.commit();
} catch (Exception e) {
//some error handling goes here...
} finally {
if (tx != null && tx.isActive()) {
tx.rollback();
}
}
これはQuery.closeの呼び出し(IS)またはそれは十分のPersistenceManagerが閉じられた後、残りを閉じること持っているのですか?いくつかのドキュメントやリンクは非常に感謝しています。ありがとう! PMは離れ結果の行が外れているときから、(L1キャッシュなどを持っているので、彼らは存在し続けますが、クエリの結果セットが閉じられますので、
完璧な答え。ありがとうございました! –