何时使用 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() 。