0

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

提前致谢

4

1 回答 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
于 2013-01-30T16:13:46.410 回答