带有条件的 Grails 查询:如何取回带有列的地图?
Posted
技术标签:
【中文标题】带有条件的 Grails 查询:如何取回带有列的地图?【英文标题】:Grails queries with criteria: how to get back a map with column? 【发布时间】:2012-02-29 09:05:17 【问题描述】:是否可以使用条件查询 grails 并接收地图列表而不是列表列表?我想在结果中包含列名,以便使用“关联数组”而不是数字数组偏移量。我目前正在做类似的事情
def topFiveUsers = BlogEntry.createCriteria().list
projections
count('id')
groupProperty('author')
maxResults 5
这导致[[123, app.User:1][111, app.User:2][...]...]
,即列表列表。我宁愿想要像[[posts:123, author: app.User:1][posts: 111, author app.User:2][...]...]
这样的东西。
一如既往:非常感谢您的帮助!
【问题讨论】:
【参考方案1】:使用resultTransformer()。 作为参数使用CriteriaSpecification.ALIAS_TO_ENTITY_MAP 关于这个主题的文档和示例很少。但这里有一个例子:
import org.hibernate.criterion.CriteriaSpecification
BlogEntry.withCriteria
maxResults 5
resultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP)
projections
count('id', 'total')
groupProperty('author', 'author')
请注意,所有投影都需要别名。否则,生成的映射由空值组成。
【讨论】:
辉煌而优雅。非常感谢谢尔盖。 对我不起作用 :(groovy.lang.MissingMethodException: No signature of method: grails.gorm.CriteriaBuilder.resultTransformer() is applicable for argument types: (org.hibernate.transform.AliasToEntityMapResultTransformer) values: [org.hibernate.transform.AliasToEntityMapResultTransformer@7a78d380]
【参考方案2】:
def topFiveList = []
topFiveUsers.each rec ->
topFiveList << [posts: rec[0], author: rec[1]]
【讨论】:
【参考方案3】:def converted = topFiveUsers.collect [posts: it[0], author: it[1]]
【讨论】:
感谢您的回复。当然,我可以稍后转换结果——这就是我目前正在做的事情。然后我想再次跳过对结果集进行后处理的开销。我猜想在休眠代码的某个地方,无论如何都会发生相同的转换...... 发布后不久,我突然想到您对两步解决方案不感兴趣。 别担心!无论如何感谢您的支持! se真是太棒了!以上是关于带有条件的 Grails 查询:如何取回带有列的地图?的主要内容,如果未能解决你的问题,请参考以下文章
PostgreSQL:查询在带有变量的查询中没有结果数据的目的地