【问题标题】:CreateCriteria with projections does not select all columns带有投影的 CreateCriteria 不会选择所有列
【发布时间】:2013-03-06 15:11:13
【问题描述】:

我的问题完全一样 Grails Projections not returning all properties and not grouped

我有以下条件

def sharedDocumentsInstanceList SharedDocuments.createCriteria().list(params){
   createAlias('receiver', 'r')
   createAlias('author', 'a')
   eq("r.id",session.uid)  
   projections{
      groupProperty("a.id")
      property("a.firstName","firstName")
      property("a.lastName","lastName")
      property("a.emailAddress","email")
   }
}

其中sharedDocuments定义如下

class SharedDocuments {
   Users author
   Users receiver
   Documents file
}

我看到的是 sharedDocumentsInstanceList 总是只有投影中提到的最后一个属性。我可以在“withCriteria”中使用相同的查询,但我似乎失去了自动分页的常规优点,因为 withCriteria 不返回分页的 pagedresultlist!

【问题讨论】:

标签: grails projection createcriteria


【解决方案1】:

为了那些仍然有这个问题的人;删除列表方法中提供的params 对象。所以上面的条件查询就变成了:

def sharedDocumentsInstanceList = SharedDocuments.createCriteria().list {
    createAlias('receiver', 'r')
    createAlias('author', 'a')
    eq("r.id",session.uid)  
    projections {
        groupProperty("a.id")
        property("a.firstName","firstName")
        property("a.lastName","lastName")
        property("a.emailAddress","email")
    }
    maxResults(params.max)
    firstResult(params.offset)
    order(params.sort, params.order)
}

【讨论】:

  • 如果您喜欢熟悉的类似 grails 的查询结果,可以添加 resultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP)
【解决方案2】:
    projections{                
        author {
           groupProperty("id")
           property("firstName","firstName")
           property("lastName","lastName")
           property("emailAddress","email")
        }
    }

使用上述方法会产生不同的结果吗?只是一个想法...

【讨论】:

  • 不,我摆脱了计数并按照您的建议编写了条件,但它仍然只打印 emailAddress。
猜你喜欢
  • 2011-10-04
  • 2017-05-25
  • 2021-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-03
  • 1970-01-01
相关资源
最近更新 更多