Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

SQL ke HQL kueri Grails

Anda menggunakan nama kelas dan bidang di HQL, dan nama tabel dan kolom di SQL. Jadi, Anda seharusnya tidak melihat garis bawah (setidaknya tidak banyak) dalam kueri HQL. Juga, itu tidak mungkin menjadi faktor di sini, tetapi kueri HQL dijalankan dari findAll dan yang dijalankan dari executeQuery bisa sedikit berbeda. Saya tidak ingat apa perbedaannya, tetapi executeQuery adalah yang benar tidak peduli kelas domain mana yang terlibat.

Sulit untuk mengetahui tanpa melihat kelas domain, tetapi sepertinya artifact_id harus artifact.id , dan document_id harus document.id . Dan karena Anda memiliki instance Dokumen, lebih tepat untuk membandingkan objek dan bukan idnya. Akhirnya saya berasumsi bahwa active adalah properti boolean, jadi ini membutuhkan nilai boolean dan bukan 1 atau 0. Jadi, jika digabungkan, tebakan terbaik saya adalah ini yang Anda inginkan:

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

Perhatikan bahwa Anda perlu memisahkan nilai param dari kontrol pagination menjadi dua peta.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menggunakan MEDIAN di samping fungsi MAX, MIN, dan AVG di MySQL

  2. Mysql tidak menggunakan indeks DATETIME ketika tabel memiliki bidang lain

  3. Di zend, bagaimana cara mencetak kueri mysql dengan benar?

  4. cara terhubung ke database di dalam gelandangan

  5. MySQL SUM dengan ID yang sama