NullPointerException при использовании и / или в критериях - PullRequest
0 голосов
/ 30 августа 2011

Очень упрощенный пример того, как я использую метод createCriteria для получения данных в моем приложении Grails:

    def c = SomeClassOfMine.createCriteria()
    def projects = c.list(max: limit, offset: start) {
        eq("userId", userId)
        if (owner != null && owner.size() > 0) {
            ilike("ownerName", owner + "%")
        }
        if (someParameter && someParameter.size() > 0) {
            or {
                ne("validated", 1)
                ne("validated2", 1)
            }
        }
        order("name", "asc")
    }

В строке, имеющей или {, я получаю исключение NullPointerException без сообщения. Я пробовал различные комбинации и внимательно следил за примерами, приведенными в разных местах, только чтобы обнаружить, что у меня возникает та же проблема, если я пытаюсь использовать и тоже. Я знаю, что есть и другие способы получения данных, но я бы очень хотел использовать этот подход. Я сам не смог понять, что может быть не так, поэтому ... Что может вызвать исключение NullPointerException в таком блоке кода на или / и ?

Я бы предоставил больше информации, если бы знал, что относится к этому делу.


РЕДАКТИРОВАТЬ: добавлено предложение if (где проверяется владелец) в примере кода.

Я исследовал больше и выяснил, что проблема в if (owner != null && owner.size() > 0) {, а точнее, в имени переменной owner. Когда я меняю имя на что-то еще, проблема исчезла. Было бы очень интересно, если бы кто-то мог объяснить, почему это происходит.

1 Ответ

1 голос
/ 08 сентября 2011

Вопрос «владелец» - зарезервированное слово в Groovy.Это описано в Groovy Closures .Вы можете попытаться поместить одинарные кавычки вокруг 'owner', чтобы ваша строка кода выглядела так:

if ('owner'! = Null && 'owner'.size ()> 0) {

Что может работать.Лучше всего использовать новое имя переменной, чтобы избежать путаницы.

...