问题描述
|
我正在使用类似“ 0”的sql方法:
MyDomainClass.findAll(\"firstname=\'George\' and lastname=\'kuo\' and username=\'kjlop\'\"),
但我有问题:
当值以数字开头(例如,当age = \'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)
//---------
我想知道groovy更改findAll()方法有什么办法吗?
如果有人知道解决方案,请帮忙。
提前致谢。解决方法
您应该能够在域对象上运行动态查找程序方法来实现所需的功能。
例:
MyDomainClass.findAllByFirstnameAndAge(\'Dan\',25)
这适用于所有数据类型和枚举。,您可以尝试使用Grails示例:
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:抱歉,hbase插件不支持createCriteria。根据您的情况,我认为尝试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)
完整的示例可以在插件页面中找到。