【问题标题】:Criteria search条件搜索
【发布时间】:2012-06-08 20:34:25
【问题描述】:

我在尝试计算项目时遇到了一些问题。

想象以下领域类

class Book {
  String name
}
class Author {
  String name
  static hasMany = [books:Book]
}

如何获得按图书数量排序的作者列表?

这是我的尝试:

def c = Author.createCriteris()
c.list {
  projections {
    count 'books', 'numBooks'
    groupProperty 'id'
  }
  order 'numBooks', 'desc'
}

但不知何故,我只得到了不可用的结果......而且我不知道如何将 Author 对象加入到 rsult 列表中...... :-(

【问题讨论】:

    标签: grails grails-orm hibernate-criteria


    【解决方案1】:

    没有尝试过,但你不能这样做:

    class Author {
    
        String name
        static hasMany = [books:Book]
    
        static namedQueries = {
            sortByMostBooks {
                books {
                    order('size', 'desc')
                }
            }
        }
    }
    

    然后通过名为 query 的清理器获取访问权限

    Author.sortByMostBooks.list();
    

    此外,您可能希望在 Book 域类中包含一个 belongsTo:

    static belongsTo = Author;
    

    或:

    static belongsTo = [authors:Author];
    

    如果一本书可能有多个作者

    【讨论】:

    • 谢谢。命名查询是个好主意,但它仍然使用标准构建器。而且“大小”似乎不是正确的语法...
    【解决方案2】:

    有东西!

    我仍然不知道如何使用标准,但通过切换到 HQL,我成功了。

    因此,如果有人提出标准解决方案,他仍然会获得正确答案的奖金:-)

    这是我的查询:

    Author.executeQuery("""
        select 
            a, size(a.books) as numBooks 
        from 
            Author a 
        group by 
            id 
        order by 
            numBooks DESC
    """,[max:20])
    

    这个查询效率不高,因为它在一个循环中获取所有作者,但现在没关系。

    【讨论】:

      猜你喜欢
      • 2012-12-12
      • 2016-02-02
      • 1970-01-01
      • 2017-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-17
      相关资源
      最近更新 更多