Bella
Bella

Reputation: 185

grails findAll() method

I am using the findAll() SQL-like method:

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

but I have got problem:

when value starts with number(for example,when age='2poj') it throws an exception

I use grails 1.3.2 and gorm-hbase 0.2.4 plugin and in my domain classes fields have String type.

Here is the Stack Trace: expecting token in range: '0'..'9', found '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)
    //---------

I wonder is there any way in groovy change findAll() method work ?

If anybody know solution please help. Thanks in advance.

Upvotes: 0

Views: 5253

Answers (2)

Hoàng Long
Hoàng Long

Reputation: 10848

You can try like the Grails example:

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

Notice: I don't know if you mistype it, but '25' is a string, so that it can't be age='25'

EDIT: I don't know how this doesn't work, but in case you want to find with multiple properties, you should use createCriteria().

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

EDIT2: Sorry, createCriteria is not supported by hbase plugin. Based on your condition, I think it's suitable to try DynamicFinderFilter (with approriate import).

// 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)

The complete example can be find in the plugin page.

Upvotes: 1

Benjamin Muschko
Benjamin Muschko

Reputation: 33426

You should be able to run a dynamic finder method on the domain object to achieve what you need.

Example:

MyDomainClass.findAllByFirstnameAndAge('Dan', 25)

This works for all data types and enums.

Upvotes: 1

Related Questions