0

我无法找到何时使用查询对象的 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 然后关闭其余部分?非常感谢一些文档或链接。谢谢!

4

1 回答 1

3

Query结果不会超过PersistenceManager创建它们的(PM),因为 PM 具有 L1 缓存等(除了结果行被分离,因此它们继续存在但查询结果集将被关闭)。关闭 PM 将关闭它负责的所有资源(包括所有查询)。所以你只需要决定我是否需要在 PM 的生命周期内清除我的查询(即你的 PM 是否长寿?),如果是这样,那么在Query.

于 2017-02-07T15:27:44.017 回答