Fle*_*tch 13 grails grails-orm
我有这样的代码:
Book.list().each {
  // real code actually does something more useful
  println "My id is " + it.id
}
这让我觉得有点浪费,每本书的整个对象只是为了访问id而被加载.Grails中有一个load()方法,当你只想对ID进行操作时,我想知道这里是否有一个等价的加载所有域实例?我应该使用HQL吗?或者我应该保持原样?
PS:这让我想知道是否应该为大多数GORM方法(查找器等)提供一个选项,使其仅"加载"而不是"获取"目标类
当您想要避免使用HQL时,标准查询与投影相结合可以解决您的问题.
    def criteria = Book.createCriteria()
    def result = criteria.list {
        projections {
            property 'id'
        }
    }
Hibernate SQL日志记录显示只从数据库加载ID,而不是整个Books : select this_.id as y0_ from book this_.
条件查询也可以作为Book域类的命名查询添加,从而可以轻松访问ID列表.
+1 @ Ruben的答案,但你可以简单地缩短它
def criteria = Book.withCriteria {
    projections {
        property 'id'
    }
}
并得到相同的结果!
| 归档时间: | 
 | 
| 查看次数: | 5773 次 | 
| 最近记录: |