После борьбы с этой проблемой в течение 1+ дней я попытался вместо этого использовать Gson для записи простого JSON String
в GridFS, который должен был устранить и решить проблему с сериализацией базового объекта Java. К моему удивлению, ошибка того же кода c сохранилась. При ближайшем рассмотрении я отследил ошибку, вызванную этими тревожными строками:
DBObject metaData = new BasicDBObject();
metaData.put(Fields.DOCUMENTS_LIST, listOfSomePojo);
Здесь listOfSomePojo
- это ArrayList
некоторого POJO, каждый из объектов которого имел поле, которое я хотел использовать для поиска. Это и было причиной ошибки кода c, потому что GridFS не могла понять, что я пытался сделать. Я намеревался включить коллекцию, каждый объект которой имел поле _id
для поиска. Вот обходной путь, который я использовал:
List<String> docIds = deal.getDocumentsList().stream()
.map(x -> x.getId())
.collect(Collectors.toList());
metaData.put(Fields.DOCUMENTS_LIST, docIds);
То есть я просто добавил вместо одного простого поля List<String>
одно из полей метаданных, а затем искал его, используя его. Это исправило ошибку кода c, и теперь все работает.
В качестве примечания, если у вас возникла похожая проблема, также убедитесь, что любой объект, который вы sh хотите сохранить в GridFS является сериализуемым, как и все дочерние объекты. Если нет, то это тоже не сработает.