Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zapytanie SQL do HQL Grails

Używasz nazw klas i pól w HQL, a nazw tabel i kolumn w SQL. Nie powinieneś więc widzieć podkreśleń (przynajmniej nie wiele) w zapytaniach HQL. Również, jest mało prawdopodobne, aby był tutaj czynnikiem, ale zapytania HQL są uruchamiane z findAll a te są uruchamiane z executeQuery może być nieco inny. Nie pamiętam jaka jest różnica, ale executeQuery jest poprawny bez względu na klasę domeny.

Trudno to stwierdzić bez oglądania klas domeny, ale wygląda na to, że artifact_id powinno być artifact.id i document_id powinno być document.id . A ponieważ masz instancję Document, bardziej właściwe jest porównywanie obiektów, a nie ich identyfikatorów. Wreszcie zakładam, że active jest właściwością logiczną, więc potrzebuje wartości logicznej, a nie 1 lub 0. Więc, łącząc to wszystko razem, najlepiej przypuszczam, że tego właśnie chcesz:

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

Pamiętaj, że musisz oddzielić wartości param od kontrolek paginacji na dwie mapy.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Stopwords i pełny tekst logiczny MySQL

  2. wybieranie wierszy z id z innej tabeli

  3. równoległe odczytywanie danych z mysql

  4. Magento - Nie znaleziono tabeli podstawowej lub widoku

  5. Walidacja i wstawianie formularzy PHP za pomocą MySql