gpt4 book ai didi

java - 何时使用 JDO DataNucleus Query.close()

转载 作者:行者123 更新时间:2023-12-02 03:03:31 25 4
gpt4 key购买 nike

我找不到何时使用查询对象的 close() 方法的明确文档。在以下示例中,尝试使用资源通过调用 Autocloseable.close() 关闭 PersistenceManager 和查询。 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 然后关闭其余部分就足够了?非常感谢一些文档或链接。谢谢!

最佳答案

Query结果不会比 PersistenceManager 持久创建它们的 (PM),因为 PM 具有 L1 缓存等(除了结果行被分离时,因此它们继续存在,但查询结果集将被关闭)。关闭 PM 将关闭其负责的所有资源(包括所有查询)。因此,您只需决定我是否需要在 PM 的生命周期内清除我的查询(即您的 PM 生命周期长吗?),如果是这样,则在 Query 上使用 closeAll() 或 close() 。 .

关于java - 何时使用 JDO DataNucleus Query.close(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42093517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com