Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Truy vấn SQL đến HQL Grails

Bạn sử dụng tên lớp và trường trong HQL cũng như tên bảng và cột trong SQL. Vì vậy, bạn sẽ không thấy dấu gạch dưới (ít nhất là không nhiều) trong các truy vấn HQL. Ngoài ra, nó không chắc là một yếu tố ở đây, nhưng các truy vấn HQL chạy từ findAll và những thứ đó chạy từ executeQuery có thể hơi khác. Tôi không thể nhớ sự khác biệt là gì, nhưng executeQuery là chính xác cho dù có liên quan đến lớp miền nào.

Thật khó để biết nếu không nhìn thấy các lớp miền, nhưng có vẻ như artifact_id phải là artifact.iddocument_id phải là document.id . Và vì bạn có cá thể Document, nên việc so sánh các đối tượng chứ không phải id của chúng sẽ phù hợp hơn. Cuối cùng, tôi giả định rằng active là một thuộc tính boolean, vì vậy nó cần một giá trị boolean chứ không phải 1 hoặc 0. Vì vậy, kết hợp tất cả những điều này lại với nhau, tôi đoán tốt nhất rằng đây là những gì bạn muốn:

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

Lưu ý rằng bạn cần tách các giá trị tham số khỏi các điều khiển phân trang thành hai bản đồ.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CẬP NHẬT bảng MySQl đơn giản từ mảng php

  2. MySQL:Cách tạo trình kích hoạt để thiết lập ngày tạo cho các hàng mới

  3. Có thể sử dụng các tham số URL với mySQL / JSP không?

  4. Tôi có cần sử dụng HTML Purifier không Nếu tôi đang tách thẻ / chuyển đổi chúng thành các thực thể HTML?

  5. Sự cố khi hiển thị kết quả truy vấn