Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 何时使用JDO DataNucleus Query.close()_Java_Sql_Jdo_Datanucleus_Autocloseable - Fatal编程技术网

Java 何时使用JDO DataNucleus Query.close()

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;

当使用查询对象的close()方法时,我无法找到清晰的文档。在下面的示例中,try with resources通过调用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();
        }
    }
Collection returnedEntities=new ArrayList();
事务tx=null;
try(PersistenceManager pm=DataStore.getInstance().getPM();
QueryQuery=pm.newQuery(Object.class);){
tx=pm.currentTransaction();
tx.begin();
query.setOrdering();
setFilter();
query.declareParameters();
returnedEntities=(集合)query.execute();
returnedEntities=pm.detachCopyAll(returnedEntities);
tx.commit();
}捕获(例外e){
//这里有一些错误处理。。。
}最后{
如果(tx!=null&&tx.isActive()){
tx.回滚();
}
}


这是查询对象所必需的Query.close()调用,还是关闭PersistenceManager然后关闭其余对象就足够了?非常感谢您提供一些文档或链接。谢谢

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

完美答案。谢谢!完美答案。谢谢!