如何在grails findAll标记中使用“SELECT id,name,part,description FROM user”。
我试过
User.findAll("SELECT id, name, part, description FROM user")
改为使用
User.findAll("FROM user")
但显示错误。 任何人都可以建议我标记
感谢, SRI ..
答案 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
}
}
希望它可以帮到你!