Srinath
Srinath

Reputation: 1343

grails findAll tag

How to use "SELECT id, name, part, description FROM user " in grails findAll tag.

I tried

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

instead using

User.findAll("FROM user")

But shows errors.
What is the tag?

Upvotes: 1

Views: 2510

Answers (4)

reixa
reixa

Reputation: 7011

It will return an ArrayList of objects you only have to access that objects values. For example:

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

Where my Code class is something like this:

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

Upvotes: 0

ataylor
ataylor

Reputation: 66059

If you want to query for only certain fields, you can use a criteria query with a projection.

Example:

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

This query will return an array of Strings (or whatever the database column type is mapped to) for each matching row, instead of a domain object.

Upvotes: 0

Burt Beckwith
Burt Beckwith

Reputation: 75671

If you want to run report-style queries like this, use the executeQuery method:

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

The return value will be a List of Object[] where each element in the object array is the type of the column, i.e. the 1st element will be a long, 2nd a String, etc.

Note that User has to be capitalized since you're referring to the Hibernate entity - this isn't a SQL query, it's HQL.

Upvotes: 1

Michael Borgwardt
Michael Borgwardt

Reputation: 346260

finadAll() returns a Collection of domain objects, so enumerating columns to select does not make sense; the queries it understands are not real SQL, and consist basically only of WHERE clauses. Since you don't seem to want to constrain the result set, this is probably all you need:

User.findAll()

It will return a collection of all User objects. If you need constraints, the syntax ist

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

Or, even simpler, you can use a dynamic finder:

User.findAllById(userId);

Upvotes: 3

Related Questions