1

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

我试过了

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

而是使用

User.findAll("FROM user")

但显示错误。
标签是什么?

4

4 回答 4

3

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

User.findAll()

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

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

或者,更简单的是,您可以使用动态查找器

User.findAllById(userId);
于 2010-06-30T12:20:16.603 回答
1

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

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

返回值将是 Object[] 的列表,其中对象数组中的每个元素都是列的类型,即第一个元素是 long,第二个元素是 String,以此类推。

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

于 2010-06-30T15:25:42.067 回答
0

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

def result = Code.findAll("from Code as c where c.user_code=?",[pass])
result[0].user_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
    }
}
于 2011-07-15T12:40:41.370 回答
0

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

例子:

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

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

于 2010-06-30T16:25:03.013 回答