gorm投射和元信息的丢失

rks*_*rks 8 grails grails-orm createcriteria nhibernate-projections

在属性上使用投影时,结果将作为列表返回,其中元素的顺序与投影块中定义的顺序相同.同时,列表中缺少属性名称,这对开发人员来说确实是不利的,因为结果将被传递,并且调用者需要知道哪个值属于哪个属性.有没有办法从Criteria查询返回一个带有属性名称作为值的键的映射?

所以,以下代码:

def c = Trade.createCriteria()
def remicTrades = c.list {

    projections {
        property('title', 'title')
        property('author.name', 'author')
    }
    def now = new Date()
    between('publishedDate', now-365, now)
}
Run Code Online (Sandbox Code Playgroud)

返回:

[['book1', 'author1']['book2', 'author2']]
Run Code Online (Sandbox Code Playgroud)

相反,我希望它返回:

[[book:'book1', author:'author1'][book:'book2', author:'author2']]
Run Code Online (Sandbox Code Playgroud)

我知道我可以在得到结果之后安排这种方式,但我认真地认为标准应该使用属性别名来返回模仿SQL查询结果的地图列表,而不是一个平淡无奇的列表.

Ser*_*yev 8

重复:带标准的Grails查询:如何使用列返回地图?
以及相应的答案(和解决方案):https://stackoverflow.com/a/16409512/1263227

使用resultTransformer.

import org.hibernate.criterion.CriteriaSpecification

Trade.withCriteria {
  resultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP)
  projections {
    property('title', 'title')
    property('author.name', 'author')
  }
  def now = new Date()
  between('publishedDate', now-365, now)
}     
Run Code Online (Sandbox Code Playgroud)