Java 何时使用JDO DataNucleus Query.close()
当使用查询对象的close()方法时,我无法找到清晰的文档。在下面的示例中,try with resources通过调用Autocloseable.close()关闭PersistenceManager和查询。内部Query.close()调用Query.closeAll(),它关闭所有返回的结果Java 何时使用JDO DataNucleus Query.close(),java,sql,jdo,datanucleus,autocloseable,Java,Sql,Jdo,Datanucleus,Autocloseable,当使用查询对象的close()方法时,我无法找到清晰的文档。在下面的示例中,try with resources通过调用Autocloseable.close()关闭PersistenceManager和查询。内部Query.close()调用Query.closeAll(),它关闭所有返回的结果 Collection<Object> returnedEntities = new ArrayList<>(); Transaction tx = null;
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();
}
}
Collection returnedEntities=new ArrayList();
事务tx=null;
try(PersistenceManager pm=DataStore.getInstance().getPM();
Query
这是查询对象所必需的Query.close()调用,还是关闭PersistenceManager然后关闭其余对象就足够了?非常感谢您提供一些文档或链接。谢谢
Query
结果不会在创建它们的PersistenceManager
(PM)之后持续,因为PM具有一级缓存等(除了分离结果行时,结果行仍然存在,但查询结果集将关闭)。关闭PM将关闭其负责的所有资源(包括所有查询)。因此,您只需决定我是否需要在PM的生命周期内清除我的查询(即您的PM是否长寿?),如果需要,则在查询上使用closeAll()或close(),因为PM具有一级缓存等(除了分离结果行时,结果行将继续存在,但查询结果集将关闭)。关闭PM将关闭其负责的所有资源(包括所有查询)。因此,您只需决定我是否需要在PM的生命周期内清除查询(即您的PM是否长寿?),如果是,则在查询中使用closeAll()或close()
完美答案。谢谢!完美答案。谢谢!