grails findAll()方法

时间:2011-04-19 13:10:25

标签: grails find hadoop hsqldb hbase

我正在使用findAll()类似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()方法吗?

如果有人知道解决方案,请帮忙。 提前谢谢。

2 个答案:

答案 0 :(得分:1)

您可以尝试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:抱歉,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)

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

答案 1 :(得分:1)

您应该能够在域对象上运行dynamic finder method以实现您的需求。

示例:

MyDomainClass.findAllByFirstnameAndAge('Dan', 25)

这适用于所有数据类型和枚举。