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)
Я пытаюсь взять один список, который я извлек из запроса хранилища данных, и сохранить только те результаты, которые также находятся в списке, который я получил из списка ключей. Оба моих списка заполняются так, как ожидалось, но я не могу, по-видимому, удержать пользователя на любом из них.В чем причина этого исключения?
// 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
Ok, в попытке упростить, так как это, по-видимому несколько проблем в одном, я перестал использовать низкий уровень 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);
Weird, вы уверены, что вы использовали 'новый ArrayList()', чтобы поместить элементы в новый ArrayList? Стекло указывает, что вы не использовали 'new ArrayList()' для 'listTwo'. – BalusC
Извините, я вырезал код, чтобы он был простым. Я определяю listOne раньше как новый ArrayList, а затем бросаю запрос в ArrayList. Это не позволит мне сделать новый ArrayList() в результате запроса, так как он возвращает массив объектов. – Joren