HQLではクラス名とフィールド名を使用し、SQLではテーブル名と列名を使用します。したがって、HQLクエリにアンダースコア(少なくとも多くはない)が表示されないようにする必要があります。また、ここで要因になる可能性は低いですが、HQLクエリはfindAll
から実行されます そしてそれらはexecuteQuery
から実行されます わずかに異なる場合があります。違いは思い出せませんが、executeQuery
どのドメインクラスが関係していても、正しいものです。
ドメインクラスを見ずに知るのは難しいですが、artifact_id
のようです artifact.id
である必要があります 、およびdocument_id
document.id
である必要があります 。また、Documentインスタンスがあるため、IDではなくオブジェクトを比較する方が適切です。最後に、active
はブール値のプロパティであるため、1や0ではなくブール値が必要です。したがって、これをすべてまとめると、これが必要なものであると推測されます。
def artifacts = Artifact.executeQuery(
"FROM Artifact WHERE id NOT IN ( " +
"SELECT artifact.id FROM Classification " +
"WHERE active = :active) AND document =:doc",
[active: true, doc:document],
[max:limit, offset:startIndex])
ページネーションコントロールのパラメータ値を2つのマップに分離する必要があることに注意してください。