java.lang.UnsupportedOperationException: This operation is not supported on Query Results
at org.datanucleus.store.query.AbstractQueryResult.contains(AbstractQueryResult.java:250)
at java.util.AbstractCollection.retainAll(AbstractCollection.java:369)
at namespace.MyServlet.doGet(MyServlet.java:101)
我试图从数据存储查询中获取一个列表,并且只保留列表中的结果,这些列表也是从列表中检索的。我的列表都按预期填充,但我似乎无法在其中任何一个上使用retainAll。什么导致这个retainAll异常?
// List<Data> listOne = new ArrayList(query.execute(theQuery));
// DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
// List<Data> listTwo = new ArrayList(ds.get(keys).values());
// listOne.retainAll(listTwo);
编辑
好吧,企图简化,因为这是一个明显多问题,我一直在使用的数据存储的底层API停止的,而不是我只是一个拉一个接一个循环。
List<MyClass> test = (List<MyClass>) query.execute();
List<MyClass> test2 = new ArrayList<MyClass>();
for (String key : favorites) {
test2.add(pm.getObjectById(MyClass.class, key));
}
log.info(test.toString());
test.retainAll(test2);
上述工作。它不会抛出异常。下面的确会抛出异常。唯一的区别是log.info。我很难过。
List<MyClass> test = (List<MyClass>) query.execute();
List<MyClass> test2 = new ArrayList<MyClass>();
for (String key : favorites) {
test2.add(pm.getObjectById(MyClass.class, key));
}
test.retainAll(test2);
奇怪,你确定你使用'新的ArrayList()'把元素在新数组列表? stacktrace表明你没有为'listTwo'使用'new ArrayList()'。 – BalusC 2010-05-20 01:14:31
对不起,我删掉了一些代码,以保持简单。我在之前将listOne定义为新的ArrayList,然后将查询转换为ArrayList。它不会让我在查询结果上执行新的ArrayList(),因为它返回一个对象数组。 – Joren 2010-05-20 01:16:35