2010-09-10 21 views
0

我希望有一個標準,只有從給定域中的所有屬性選擇BLA1和bla2標準SELECT BLA1,bla2一個從Foo

Foo.findAll()

def c = Foo.createCriteria() 
def results = c {} 

有:

SELECT * FROM foo 

results =列表全部給定域foo的屬性

SELECT bla1,bla2 FROM foo 

寫爲標準 DEF C = Foo.createCriteria() DEF結果= C { ??? }

+0

所以你的問題是?看起來你已經擁有了這臺計算機? – 2010-09-10 09:02:35

+0

ups我的錯,編輯上面,謝謝 – skurt 2010-09-10 09:04:53

+0

你的域**真的有很多屬性,你需要擔心嘗試像這樣優化嗎?如果是這樣,那麼也許你需要分解一下你的對象模型。 – 2010-09-10 12:01:28

回答

0

您需要使用投影

def c = Foo.createCriteria() 
results = c.list { 
    projections { 
     property('bla1') 
     property('bla2') 
    } 
} 
1

我認爲這是更自然的使用HQL此:

def results = Foo.executeQuery('SELECT bla1,bla2 FROM Foo') 

的返回值將是Object []對象的名單,因此,如果例如BLA1是一個字符串和bla2是你的那樣訪問數據的整數

for (row in results { 
    String bla1 = row[0] 
    int bla2 = row[1] 
    ... 
} 
0

我現在用namedQueries的正常工作:

類項目{ 產品產品 字符串somethingShown 字符串somethingHidden

static belongsTo = [product:Product] 
static constraints = { 
    somethingShown() 
    somethingHidden() 
} 
    static namedQueries = { 
     restrictedObj { item -> 
       projections { 
        property('product') 
      property('somethingShown') 
     } 
     eq 'id', item.id 
} 

}

查詢違禁物品

Item.restrictedObj(item).list() 

現在只剩下一個問題,如何限制與belongsTo連接的類。例如,如果產品也有一個namedQuery「restrictedObj」。在標準屬性中使用此方法的任何方式?