2011-04-19 61 views
0

我使用findAll()類似SQL的方法:的Grails的findAll()方法

MyDomainClass.findAll("firstname='George' and lastname='kuo' and username='kjlop'"), 

,但我有問題:

當值以數字開始時(例如,當年齡= '2poj' )它拋出一個異常

我使用grails 1.3.2和gorm-hbase 0.2.4插件,並在我的域類字段中有String類型。

這裏是堆棧跟蹤: 在範圍期待令牌: '0' .. '9',發現 'P'

at org.grails.hbase.ghql.LexerRules.nextToken(LexerRules.java:125) 

at org.grails.hbase.finders.QueryStringTokenizer.tokenize(QueryStringTokenizer.groovy:59) 

at org.grails.hbase.finders.TokenizerStrategy$tokenize.call(Unknown Source) 
    //--------- 

不知是否有常規變化的findAll()方法的工作的任何方式?

如果有人知道解決方案,請幫忙。 在此先感謝。

+0

我簡直不敢相信#1 - 正確引用了HQL語句。它正是你使用的代碼嗎? #2也應該工作。如果你在hsql上試用它會怎麼樣? 3.你可以試試MyDomainClass.findAllByFirstnameAndLastname('George','kuo')嗎?它應該適用於每種簡單類型,包括枚舉。 – 2011-04-19 16:23:47

+0

@Victor感謝您的回覆...我試過MyDomainClass.findAllByFirstnameAndLastname()方法,它在大小寫值開頭的情況下起作用,但它不適用於枚舉值。 – Bella 2011-04-20 07:10:15

+0

除此之外,我必須找到多個屬性.. – Bella 2011-04-20 07:25:05

回答

0

你可以嘗試像Grails example

MyDomainClass.findAll("from DomainTable as b where b.firstname=:firstname and b.age=:age", [firstname:'Dan Brown', age: 25] 

聲明:我不知道,如果你輸錯了,但「25」是一個字符串,使其不能age='25'

編輯: 我不知道這是行不通的,但如果你想找到多個屬性,你應該使用createCriteria()。

def c = MyDomainClass.createCriteria() 
def results = c.list { 
    like("firstName", "George%") 
    like("age", "25"); 
} 

EDIT2:對不起,個createCriteria不HBase的插件支持。根據您的情況,我認爲適合嘗試使用DynamicFinderFilter(通過適當的導入)。

// all books written by Dan Brown or J K Rowling 
    DynamicFinderFilter filterList = new FinderFilterList(Operator.OR) 

    DynamicFinderFilter filter1 = new Filter('author', 'Dan Brown') 
    filterList.addFilter(filter1) 

    DynamicFinderFilter filter2 = new Filter('author', 'J K Rowling') 
    filterList.addFilter(filter12) 

    results = Book.findAll(filterList) 

完整的例子可以在plugin page找到。

+0

@Hoàng龍在我的領域類中的所有字段都有字符串類型...我試過MyDomainClass.findAll(「從DomainTable作爲b,其中b.firstname =:firstname和b。年齡=:年齡「,[名字:'丹布朗',年齡:25]),但它不工作...我試過在hbase文檔中找到這個語法,但沒有找到[link] http:// www .grails.org/plugin/gorm-hbase ...我認爲它不支持它。 – Bella 2011-04-20 07:22:47

+0

@貝拉:也許我記得它錯了。沒關係,我想你可以使用createCriteria()獲得相同的結果: – 2011-04-20 08:09:26

+0

@HoàngLong它不起作用......我想,hbase也不支持標準。 – Bella 2011-04-20 09:29:46

0

您應該可以在域對象上運行dynamic finder method以實現您所需的功能。

例子:

MyDomainClass.findAllByFirstnameAndAge('Dan', 25) 

這適用於所有數據類型和枚舉。

+0

@Benjiamin它的作品,但我必須找到與多個屬性(例如:MyDomainClass.findAll(「用戶名='12a58n'和firstname ='喬治'和姓氏''郭'和(城市='myCity'或城市= 'hisCity')「)) – Bella 2011-04-20 07:18:44

相關問題