首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >grails findAll()方法

grails findAll()方法
EN

Stack Overflow用户
提问于 2011-04-19 13:10:24
回答 2查看 5.2K关注 0票数 0

我使用的是类似findAll() SQL的方法:

代码语言:javascript
复制
MyDomainClass.findAll("firstname='George' and lastname='kuo' and username='kjlop'"),

但我有问题:

当值以数字开头(例如,当age='2poj')时,它会抛出一个异常

我使用grails1.3.2和Gorm-HBASE0.2.4插件,在我的域类中,字段有String类型。

这是堆栈跟踪:在范围内期待令牌:'0'..'9',找到'p‘

代码语言:javascript
复制
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()方法吗?

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

EN

回答 2

Stack Overflow用户

发布于 2011-04-19 16:17:22

你可以尝试像Grails示例一样

代码语言:javascript
复制
MyDomainClass.findAll("from DomainTable as b where b.firstname=:firstname and b.age=:age", [firstname:'Dan Brown', age: 25]

注意:我不知道你是否输入错了,但是“25”是一个字符串,所以它不能是age='25'

编辑:--我不知道它是如何工作的,但是如果您想使用多个属性查找,则应该使用createCriteria()。

代码语言:javascript
复制
def c = MyDomainClass.createCriteria()
def results = c.list {
    like("firstName", "George%")
    like("age", "25");
}

EDIT2:对不起,createCriteria不受hbase插件的支持。根据您的情况,我认为尝试DynamicFinderFilter (带有学徒导入)是合适的。

代码语言:javascript
复制
// 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)

完整的示例可以在插件页面中找到。

票数 1
EN

Stack Overflow用户

发布于 2011-04-19 17:43:57

您应该能够在域对象上运行一个动态查找法来实现您的需要。

示例:

代码语言:javascript
复制
MyDomainClass.findAllByFirstnameAndAge('Dan', 25)

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5716857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档