2010-06-30 83 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 
    } 
} 

希望它可以幫助你!