Hibernate OGM聚合查询的结果
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate OGM聚合查询的结果相关的知识,希望对你有一定的参考价值。
我在我的应用程序中使用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?
好吧,是的,你执行查询的方式将返回你的类的列表对象。这样你就不需要使用强制转换了,所以你可以像这样使用它:
List<SWMessageR> records = em.createNativeQuery(nativeQuery, SWMessageImpl.class).getResultList();
虽然,如果你期望一个结果,我建议使用这种方式:
SWMessageR record = (SWMessageR) em.createNativeQuery( query1, SWMessageR.class ).getSingleResult();
看看Hibernate Search Documentation Query Section,一切都会很清楚。干杯。
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是实体类。
以上是关于Hibernate OGM聚合查询的结果的主要内容,如果未能解决你的问题,请参考以下文章
Hibernate OGM 映射本机查询的@Embeddable 对象
wildfly 10上使用最新的 Hibernate ORM OGM
休眠 OGM Neo4j (5.0) Wildfly 10 错误。提供者 org.hibernate.ogm.service.impl.OgmIntegrator 不是子类型
使用Hibernate OGM和云MongoDB Atlas M0(免费层)