sql >> Databasteknik >  >> RDS >> Mysql

SQL till HQL-fråga Grails

Du använder klass- och fältnamn i HQL och tabell- och kolumnnamn i SQL. Så du bör inte se understreck (åtminstone inte många) i HQL-frågor. Dessutom är det osannolikt att det är en faktor här, men HQL-frågor körs från findAll och de körs från executeQuery kan vara lite annorlunda. Jag kommer inte ihåg vad skillnaden är, men executeQuery är den korrekta oavsett vilken domänklass som är inblandad.

Det är svårt att veta utan att se domänklasserna, men det verkar som artifact_id ska vara artifact.id och document_id ska vara document.id . Och eftersom du har Document-instansen är det mer O-O-riktigt att jämföra objekten och inte deras ID. Slutligen antar jag att active är en boolesk egenskap, så den behöver ett booleskt värde och inte en 1 eller 0. Så, sammanställt allt detta, är min bästa gissning att det här är vad du vill ha:

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

Observera att du måste separera paramvärden från sideringskontroller i två kartor.



  1. Problem med att visa MySQL-data på Android Studio med volley

  2. Mac psql/readline - Biblioteket är inte laddat

  3. Konfigurera Django med MySQL på macOS

  4. MySQL fel nr 121