grails findAll标签

时间:2010-06-30 12:11:01

标签: grails findall

如何在grails findAll标记中使用“SELECT id,name,part,description FROM user”。

我试过

 User.findAll("SELECT id, name, part, description FROM user") 

改为使用

User.findAll("FROM user")

但显示错误。 任何人都可以建议我标记

感谢, SRI ..

4 个答案:

答案 0 :(得分:3)

finadAll()返回一个域对象集合,因此枚举要选择的列没有意义;它理解的查询不是真正的SQL,基本上只包含WHERE子句。由于您似乎不想约束结果集,这可能就是您所需要的:

User.findAll()

它将返回所有User个对象的集合。如果需要约束,则语法为

User.findAll("from User as u where u.id=?", [userId])

或者,甚至更简单,您可以使用a dynamic finder

User.findAllById(userId);

答案 1 :(得分:1)

如果要运行这样的报表式查询,请使用executeQuery方法:

def rows = User.executeQuery("SELECT id, name, part, description FROM User")

返回值将是一个List of Object [],其中对象数组中的每个元素都是列的类型,即第一个元素是long,2nd是一个String等。

请注意,由于您指的是Hibernate实体,因此必须大写用户 - 这不是SQL查询,而是HQL。

答案 2 :(得分:0)

如果您只想查询某些字段,可以使用带投影的条件查询。

示例:

def userProperties = User.withCriteria {
    projections {
        property('id')
        property('name')
        property('part')
        property('description')
    }
}

此查询将返回每个匹配行的字符串数组(或任何数据库列类型映射到的数组),而不是域对象。

答案 3 :(得分:0)

它将返回一个只需要访问该对象值的对象的ArrayList。例如:

def result = Code.findAll("from Code as c where c.user_code=?",[pass])
result[0].user_code

我的Code类是这样的:

class Code {

    String user_code
    boolean flg_active

    static constraints = {

        user_code nullable:true, blank:true, size:0..Text.MID
        flg_active nullable:true, blank:true, default:1
    }
}

希望它可以帮到你!