Mysql
 sql >> база данни >  >> RDS >> Mysql

SQL към HQL заявка Grails

Използвате имена на класове и полета в HQL и имена на таблици и колони в SQL. Така че не трябва да виждате долни черти (поне не много) в HQL заявки. Освен това е малко вероятно това да е фактор тук, но HQL заявките се изпълняват от findAll и тези, които се изпълняват от executeQuery може да бъде малко по-различен. Не мога да си спомня каква е разликата, но executeQuery е правилният, без значение кой клас домейн е включен.

Трудно е да се знае, без да се видят класовете на домейна, но изглежда като artifact_id трябва да бъде artifact.id и document_id трябва да бъде document.id . И тъй като имате екземпляра на документа, по-правилно е да сравнявате обектите, а не техните идентификатори. Накрая приемам, че 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])

Обърнете внимание, че трябва да разделите стойностите на param от контролите за страниране в две карти.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL ограничение SELECT, но не JOIN

  2. Какви опции имам, за да направя своя ORDER BY по-бърз?

  3. MySQL - Докато е в клауза SELECT

  4. Как да инсталирате MySQL на macOS

  5. MySQL СЪЗДАВАНЕ НА ТАБЛИЦА АКО НЕ СЪЩЕСТВУВА -> Грешка 1050