我的代码已经可以运行了:
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
没有问题。现在我想按 date
对 List
进行排序:
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”放在引号之间,因为如果我不这样做,即使没有排序部分它也不会工作(我刚刚意识到),但现在它说我正在做一个不受支持的 native 查询,指出排序部分。我是否应该在我已经将它放入 List 对象后对其进行排序?
最佳答案
这个答案来晚了,但我多年来一直在与同一个问题作斗争,所以也许它会对其他人有所帮助。
根据 this forum post ,键和值都必须用引号引起来,因此您的 something__id
应该是 "something__id"
。
关于Java 实体管理器 - JSON 阅读器期待一个值但发现 'db',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39373302/