如何在 grails findAll 标签中使用“SELECT id, name, part, description FROM user”。
我试过了
User.findAll("SELECT id, name, part, description FROM user")
而是使用
User.findAll("FROM user")
但显示错误。
标签是什么?
finadAll()
返回域对象的集合,因此枚举要选择的列没有意义;它理解的查询不是真正的 SQL,基本上只包含 WHERE 子句。由于您似乎不想限制结果集,因此这可能就是您所需要的:
User.findAll()
它将返回所有User
对象的集合。如果你需要约束,语法是
User.findAll("from User as u where u.id=?", [userId])
或者,更简单的是,您可以使用动态查找器:
User.findAllById(userId);
如果您想像这样运行报表样式的查询,请使用 executeQuery 方法:
def rows = User.executeQuery("SELECT id, name, part, description FROM User")
返回值将是 Object[] 的列表,其中对象数组中的每个元素都是列的类型,即第一个元素是 long,第二个元素是 String,以此类推。
请注意,由于您指的是 Hibernate 实体,因此 User 必须大写 - 这不是 SQL 查询,而是 HQL。
它将返回一个对象的 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
}
}
如果您只想查询某些字段,您可以使用带有投影的条件查询。
例子:
def userProperties = User.withCriteria {
projections {
property('id')
property('name')
property('part')
property('description')
}
}
此查询将为每个匹配的行返回一个字符串数组(或数据库列类型映射到的任何内容),而不是域对象。