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 に答える