【发布时间】:2014-07-10 23:22:55
【问题描述】:
我的所有经理都有一个特定的查询方法,它必须返回一个 transient 集合,但我想在执行后立即关闭查询。
tx.begin();
Query query=pm.newQuery(...);
Collection col=(Collection)query.execute();
pm.makeTransientAll(col,true);
query.close();
tx.commit();
问题:查询关闭后无法访问集合(DN知道身份?)否则会抛出“查询已关闭”错误!
解决方案:创建原始集合的副本!
Collection col=new ArrayList((Collection)query.execute());
但我想避免这种情况...即使它是本地副本并且不是深度克隆,它仍然会为整个元素数组分配所需的空间(因此,在某些时候会是 2 倍分配的内存),我想避免这种情况。
我错过了什么? 有没有办法避免创建克隆?
【问题讨论】:
标签: collections jdo datanucleus transient