我在我的应用程序中使用hibernate ogm 5.1并构建此查询。此查询
String query = "db.SWMessages.aggregate( [ {0}, {1} ] )";
Document q1 = new Document("$match",new Document("messageUuid",new
Document("$ne" , id.toString())));
Document q2 = new Document("$group", new Document("_id",
"$localReference").append("max", new Document("$max","$creationDate")));
Object[] param = { q1.toJson(), q2.toJson() };
String nativeQuery = MessageFormat.format(query, param);
List<SWMessageR> records = (List<SWMessageR>) em.createNativeQuery(nativeQuery, SWMessageImpl.class)
.getResultList();
以上代码生成如下查询:
db.SWMessages.aggregate([ { "$match" : { "messageUuid" : { "$ne" : "9c1464d7-311d-4b50-8b81-005bad055232" } } } , { "$group" : { "_id" : "$localReference", "max" : { "$max" : "$creationDate" } } } ])
我的问题是这个查询的结果会返回一个实体对象,即SWMessageR?
答案 0 :(得分:0)
嗯,是的,执行查询的方式是返回类的List对象。这样你就不需要使用强制转换了,所以你可以像这样使用它:
List<SWMessageR> records = em.createNativeQuery(nativeQuery, SWMessageImpl.class).getResultList();
但是,如果你期待一个结果,我建议使用这种方式:
SWMessageR record = (SWMessageR) em.createNativeQuery( query1, SWMessageR.class ).getSingleResult();
看看Source,一切都会清楚。 欢呼声。
答案 1 :(得分:0)
Hibernate OGM可以将结果转换为实体:https://docs.jboss.org/hibernate/stable/ogm/reference/en-US/html_single/#ogm-mongodb-queries-native
我不确定您的查询返回了什么,但如果它是代表您实体的集合中的文档,我希望它可以正常工作。
确保传递预期的实体类型,它看起来像这样:
List<SWMessageR> results = em
.createNativeQuery( nativeQuery, SWMessageR.class )
.getResultList();
假设SWMessageR是实体类。