sql >> Databáze >  >> RDS >> Mysql

SQL to HQL dotaz Grails

V HQL používáte názvy tříd a polí a v SQL názvy tabulek a sloupců. Takže byste neměli vidět podtržítka (alespoň ne mnoho) v dotazech HQL. Je také nepravděpodobné, že by to byl faktor, ale dotazy HQL se spouštějí z findAll a ty běží z executeQuery může být mírně odlišná. Nepamatuji si, jaký je v tom rozdíl, ale executeQuery je ten správný bez ohledu na to, o kterou doménovou třídu jde.

Je těžké to zjistit, aniž byste viděli třídy domén, ale vypadá to jako artifact_id by měl být artifact.id a document_id by měl být document.id . A protože máte instanci dokumentu, je vhodnější porovnávat objekty a ne jejich ID. Nakonec předpokládám, že active je booleovská vlastnost, takže potřebuje booleovskou hodnotu a ne 1 nebo 0. Takže když to dáme dohromady, můj nejlepší odhad je, že to je to, co chcete:

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])

Všimněte si, že musíte oddělit hodnoty parametrů z ovládacích prvků stránkování do dvou map.



  1. SQL Server:Dvouúrovňová GROUP BY s výstupem XML

  2. Filtrujte dotaz MYSQL pomocí možností formuláře

  3. Jak vytvořit dotaz z nadřazené podřízené tabulky hierarchie

  4. jak načíst, odstranit, odevzdat z kurzoru