sql >> Database >  >> RDS >> Mysql

SQL naar HQL-query Grails

U gebruikt klasse- en veldnamen in HQL en tabel- en kolomnamen in SQL. U zou dus geen onderstrepingstekens (althans niet veel) moeten zien in HQL-query's. Het is ook onwaarschijnlijk dat het hier een factor is, maar HQL-query's worden uitgevoerd vanuit findAll en die worden uitgevoerd vanuit executeQuery kan iets anders zijn. Ik weet niet meer wat het verschil is, maar executeQuery is de juiste, ongeacht om welke domeinklasse het gaat.

Het is moeilijk te weten zonder de domeinklassen te zien, maar het lijkt erop dat artifact_id moet artifact.id . zijn , en document_id moet document.id . zijn . En aangezien je de Document-instantie hebt, is het beter om de objecten te vergelijken en niet hun id's. Ten slotte ga ik ervan uit dat active is een booleaanse eigenschap, dus het heeft een booleaanse waarde nodig en geen 1 of 0. Dus als ik dit allemaal bij elkaar optel, is mijn beste gok dat dit is wat je wilt:

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

Houd er rekening mee dat u de parameterwaarden van de pagineringsbesturingselementen in twee kaarten moet scheiden.



  1. Incrementele client-updates implementeren met rowversions in Postgres

  2. Oracle - selecteer een specifieke kolom van een ref-cursor

  3. SELECT DISTINCT ON-query's converteren van Postgresql naar MySQL

  4. T-SQL Tuesday #67:Nieuwe back-up en herstel van uitgebreide gebeurtenissen