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 на нито един от тях.
// 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);
new ArrayList()
, за да поставите елементите в нов списък с масиви? Stacktrace именно подсказва, че не сте използвалиnew ArrayList()
заlistTwo
. - person BalusC   schedule 20.05.2010