何时使用 JDO DataNucleus Query.close()
When to use JDO DataNucleus Query.close()
我找不到何时使用查询对象的 close() 方法的明确文档。在下面的示例中,try with resources 通过调用 Autocloseable.close() 关闭 PersistenceManager 和 Query。在内部 Query.close() 调用 Query.closeAll(),它会关闭所有返回的结果。
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() 调用,还是足以让 PersistenceManager 关闭然后关闭其余部分?非常感谢某些文档或 Link。谢谢!
Query
结果不会比创建它们的 PersistenceManager
(PM) 更持久,因为 PM 具有 L1 缓存等(除了结果行分离时,它们会继续存在但查询结果集将被关闭)。关闭 PM 将关闭它负责的所有资源(包括所有查询)。所以你只需要决定我是否需要在 PM 的生命周期内清除我的查询(即你的 PM 长寿吗?),如果是这样,那么在 Query
上使用 closeAll() 或 close() 。
我找不到何时使用查询对象的 close() 方法的明确文档。在下面的示例中,try with resources 通过调用 Autocloseable.close() 关闭 PersistenceManager 和 Query。在内部 Query.close() 调用 Query.closeAll(),它会关闭所有返回的结果。
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() 调用,还是足以让 PersistenceManager 关闭然后关闭其余部分?非常感谢某些文档或 Link。谢谢!
Query
结果不会比创建它们的 PersistenceManager
(PM) 更持久,因为 PM 具有 L1 缓存等(除了结果行分离时,它们会继续存在但查询结果集将被关闭)。关闭 PM 将关闭它负责的所有资源(包括所有查询)。所以你只需要决定我是否需要在 PM 的生命周期内清除我的查询(即你的 PM 长寿吗?),如果是这样,那么在 Query
上使用 closeAll() 或 close() 。