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);
EDIT
Хорошо, в попытке упростить, поскольку это, по-видимому, множественные проблемы в одной, я перестал использовать низкоуровневый 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);