为什么这是一个无效的hql查询?

时间:2013-01-30 16:06:39

标签: grails 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验证器,其中包含有关无效部分的更多信息。现在没有成功

提前致谢

1 个答案:

答案 0 :(得分: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