2013-01-30 3 views
0

У меня возникли проблемы с этим HQL в Grails приложения:Почему это недопустимый запрос hql?

это запрос

def books = Book.findAll("from book where author_id in (${listOfId?.join(',')}) and (owner_id is null or owner_id = ${ownerId}) and status = 'available'") 

И это ошибка:

org.codehaus.groovy.grails.orm.hibernate.exceptions.GrailsQueryException: Invalid query [from coupon where campaign_id in (7) and (owner_id is null or owner_id = 1112) and status = 'available'] 

Любая идея, почему это недопустимый запрос? Я ищу hql validator с дополнительной информацией о том, что является недопустимой частью. Никакой успех сейчас

Заранее спасибо

+0

Мое дикое предположение, что список из 1 предмета может быть недействительным. –

ответ

1

Похоже, ваш HQL запрос использует имена таблиц и столбцов вместо использования сущностей, полей и ассоциаций. Вы не показали свои объекты, но если они уважают обычные конвенции, запрос HQL должен выглядеть

from Coupon c 
left join c.owner owner 
where c.campaign.id in (7) 
and (owner.id is null or owner.id = 1112) 
and status = 'available' 

Вы должны также использовать параметризованные запросы вместо конкатенации строк. Это делает ваш код менее эффективным и подвержен атакам SQL-инъекций или просто устраняет проблемы:

from Coupon c 
left join c.owner owner 
where c.campaign.id in :campaignIdList 
and (owner.id is null or owner.id = :ownerId) 
and status = :status 
Смежные вопросы