2014-03-05 78 views
2

我正在嘗試向查詢添加一些用戶定義的過濾器。過濾器是HTML列表元素中的屬性,我想要做的是,如果未選擇「全部」,則將條件添加到查詢中。我迄今試過的是如何動態修改groovy hibernate查詢

Criteria crit = Person.createCriteria(). 
addAccountCondition(crit) 
addPrimarySkillCondition(crit) 
addSkillsetCondition(crit) 
addDateCondition(crit) 
crit.addOrder(Order.asc("account.name")) 

crit.list() 

private void addAccountCondition(Criteria query){ 
String acct = params?.accts?.value?.toString() 

if (!acct.equals("all") && acct != null){ 
    query.add(Restrictions.eq("account.name", acct)) 
// old version 
    //   query = query.where { 
//    account { 
//     eq "name", acct 
//     order "name", "asc" 
//    } 
//   } 
    println "acct is ${acct}" 
    println "Applying account condition. The query is ${query.toString()}" 
} 
} 

但是,用這段代碼,我試圖將一個groovy Criteria轉換成一個Hibernate條件。我知道如何使用所有這些方法進行常規查詢,但不知道如何動態地進行查詢。

+1

https://github.com/vahidhedayati/ajaxdependancyselection/blob/master/grails-app/services/ajaxdependancyselection/AutoCompleteService.groovy看看這裏 - 所有動態查詢與域名類搜索值等從其他地方傳入 – Vahid

+0

謝謝你真是太棒了! –

回答

0

從代碼示例中可以看出所有內容有點困難,但類似這樣的內容可能會有所幫助...

def results = Person.withCriteria { 
    def acct = params.accts?.value 
    if(acct) { 
     account { 
      eq 'name', acct 
     } 
    } 
} 

如果你真的想把閉包傳遞給addPrimarySkillCondition,addDateCondition等幾個方法,你可以用閉包上的一些特殊的委託來處理。爲了向您展示具體細節,我需要查看這些方法中的內容。

我希望有幫助。