我在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验证器,其中包含有关无效部分的更多信息。现在没有成功
提前致谢
答案 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