आप HQL में वर्ग और फ़ील्ड नामों का उपयोग करते हैं, और SQL में तालिका और स्तंभ नामों का उपयोग करते हैं। तो आपको एचक्यूएल प्रश्नों में अंडरस्कोर (कम से कम कई नहीं) नहीं देखना चाहिए। साथ ही, यहां एक कारक होने की संभावना नहीं है, लेकिन एचक्यूएल क्वेरी findAll से चलती हैं और वे executeQuery . से चलते हैं थोड़ा अलग हो सकता है। मुझे याद नहीं है कि अंतर क्या है, लेकिन executeQuery सही है चाहे कोई भी डोमेन वर्ग शामिल हो।
डोमेन कक्षाओं को देखे बिना यह जानना कठिन है, लेकिन ऐसा लगता है कि artifact_id artifact.id be होना चाहिए , और document_id document.id be होना चाहिए . और चूंकि आपके पास दस्तावेज़ उदाहरण है, इसलिए वस्तुओं की तुलना करना अधिक ओ-ओ-उचित है, न कि उनकी आईडी। अंत में मैं मान रहा हूँ कि 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])
ध्यान दें कि आपको परम मानों को पेजिनेशन नियंत्रणों से दो मानचित्रों में अलग करने की आवश्यकता है।