Java Entity Manager - программа чтения JSON ожидала значение, но обнаружила «db»

2

У меня уже работает этот код:

EntityManager entityManager = getEntityManager();
entityManager.getTransaction().begin();
String query = "db.Band.find({})";
List<Band> list = (List<Band>) entityManager.createNativeQuery(query, Band.class).getResultList();
entityManager.close();
return list;

Он возвращает List без проблем. Теперь я хочу отсортировать этот List по date:

EntityManager entityManager = getEntityManager();
entityManager.getTransaction().begin();
String query = "db.Band.find({something__id:ObjectId(\"" + myId + "\")}).sort({\"somethingelse.date\":-1})";
List<Band> list = (List<Band>) entityManager.createNativeQuery(query, Band.class).getResultList();
entityManager.close();
return list;

Моя консоль дает мне следующее сообщение:

org.bson.json.JsonParseException: JSON reader was expecting a value but found 'db'

Я проверил, что моя String работает правильно на консоли Mongo, и это произошло. Есть идеи?

Редактирование: я пытался помещать "something__id" между кавычками, потому что он не работал бы даже без части сортировки, если бы я этого не сделал (я просто это понял), но теперь он говорит, что я делаю неподдерживаемый основной запрос, указывая на Сортирующую часть, Должен ли я сортировать его после того, как у меня уже есть его в объекте List?

  • 0
    Я предполагаю, что вы используете неправильный формат запроса для этого конкретного API.
Теги:
entitymanager

3 ответа

2

Дело в том, что если тип поля, к которому вы хотите получить доступ, - это String вам нужно будет добавить кавычки к значению поля.

Чтобы дать вам пример, я создал небольшую DSL для создания запросов, не беспокоясь о специфических ключевых моментах MongoDB, таких как $eq, $lt и т.д., И у меня была аналогичная проблема. Его можно решить, добавив одиночные кавычки.

Queries.get(Query.where("name", Operator.is("'Kim'"))) 
2

Этот ответ запоздал, но я боролся с той же проблемой целую вечность, поэтому, возможно, это поможет кому-то другому.

В соответствии с этим сообщением в форуме ключи и значения должны быть заключены в кавычки, поэтому вы должны something__id ____ быть "something__id".

0

Это может кому-то помочь, у меня была похожая ошибка, и в конце концов это произошло из-за того, что мне не хватало индекса.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню