sql >> Database teknologi >  >> RDS >> Mysql

SQL til HQL forespørgsel Grails

Du bruger klasse- og feltnavne i HQL og tabel- og kolonnenavne i SQL. Så du bør ikke se understregninger (i hvert fald ikke mange) i HQL-forespørgsler. Det er også usandsynligt, at det er en faktor her, men HQL-forespørgsler kører fra findAll og dem kører fra executeQuery kan være lidt anderledes. Jeg kan ikke huske, hvad forskellen er, men executeQuery er den korrekte, uanset hvilken domæneklasse der er involveret.

Det er svært at vide uden at se domæneklasserne, men det virker som artifact_id skal være artifact.id , og document_id skal være document.id . Og da du har Document-forekomsten, er det mere O-O-rigtigt at sammenligne objekterne og ikke deres id'er. Endelig antager jeg, at active er en boolesk egenskab, så den har brug for en boolesk værdi og ikke en 1 eller 0. Så når jeg sætter det hele sammen, er mit bedste gæt, at det er det, du vil have:

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

Bemærk, at du skal adskille parameterværdier fra pagineringskontroller i to kort.



  1. 4 out-of-the-box SQL-datakonverteringsmetoder og brugssager

  2. TSQL - Er det muligt at definere sorteringsrækkefølgen?

  3. Opret Spark Dataframe fra SQL Query

  4. tilføjelse af kodningsinformation til resultatet af FOR XML