2010-06-30 54 views
1

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

我试图

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

而是采用

User.findAll("FROM user") 

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

感谢, SRI ..

回答

3

finadAll()返回域对象的集合,所以列举列可以选择没有意义;它理解的查询不是真正的SQL,基本上只包含WHERE子句。既然你似乎并不想约束的结果集,这可能是你所需要的:

User.findAll() 

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

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

甚至更​​简单,你可以使用a dynamic finder

User.findAllById(userId); 
+0

但我们是否有任何显示“SELECT id,name,part,description FROM user”的标签。谢谢 – Srinath 2010-06-30 12:37:30

+0

@Srinath:不,没有那样的问题。这对于一个适用于域对象的框架来说是没有意义的。使用我列出的方法获取User对象然后访问这些对象的属性有什么问题?听起来你以前只用过PHP,现在正在尝试在Grails中编写PHP代码。这不会让你走得很远。 – 2010-06-30 12:54:48

+0

以前我曾在Ruby on Rails工作过。我已经使用了上面提到的标签findAll。我只想知道Grails中是否有这样的标签。感谢您的建议:( – Srinath 2010-06-30 14:48:47

1

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

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

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

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

0

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

实施例:

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

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

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 
    } 
} 

希望它可以帮助你!