2016-09-07 6 views
1

У меня есть этот код уже работает:Java Entity Manager - JSON читатель ожидал значение, но нашел «» дб

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 был правильно работать в Монго консоли, и это сделал. Есть идеи?

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

+0

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

ответ

1

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

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

1

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

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

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