метод grails findAll () - PullRequest
       10

метод grails findAll ()

0 голосов
/ 19 апреля 2011

Я использую 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 ]

1 голос
/ 19 апреля 2011

Вы должны иметь возможность запустить метод динамического поиска для объекта домена, чтобы достичь того, что вам нужно.

Пример:

MyDomainClass.findAllByFirstnameAndAge('Dan', 25)

Это работает для всех типов данных и перечислений.

1 голос
/ 19 апреля 2011

Вы можете попробовать, как пример Grails :

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

Обратите внимание: я не знаю, если вы ошиблись, но «25» - это строка, поэтому она не может быть age='25'

EDIT: Я не знаю, как это не работает, но если вы хотите найти с несколькими свойствами, вы должны использовать 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)

Полный пример можно найти на странице плагина .

...