Tôi gặp sự cố sau. Trong ứng dụng, mà tôi đang phát triển, chúng tôi sử dụng Hibernate và mọi truy vấn được viết bằng API tiêu chí. Bây giờ, ở một số nơi, chúng tôi muốn thêm khả năng cho người dùng viết một số mã SQL sẽ được sử dụng như một phần của mệnh đề where trong truy vấn. Vì vậy, về cơ bản, người dùng có thể lọc dữ liệu được hiển thị cho anh ta từ cơ sở dữ liệu theo cách riêng của mình.Làm thế nào để sử dụng SQL gốc dưới dạng một đoạn (trong đó khoản) của truy vấn lớn hơn được tạo bằng API Tiêu chí trong Hibernate?
Trong vài ngày tới, tôi đang cố gắng tìm cách sửa đổi các truy vấn trước đó của chúng tôi để thu được kết quả được mô tả ở trên. Dưới đây là những gì tôi biết:
Có vẻ như bạn không thể kết hợp API tiêu chí với SQL gốc. Bạn có thể viết toàn bộ truy vấn trong SQL hoặc chỉ sử dụng API tiêu chí. Có đúng không? Tôi hỏi câu hỏi này bởi vì nó sẽ là giải pháp đơn giản nhất, chỉ để sử dụng mã SQL này như một vị từ khác trong mệnh đề where trong truy vấn của chúng tôi. Nhưng tôi không nghĩ nó có thể ở đẳng cấp này.
Tôi biết người dùng bảng nào muốn lọc dữ liệu. Vì vậy, tôi chỉ có thể thực thi truy vấn SQL nguyên gốc và sử dụng danh sách kết quả như một tham số cho mệnh đề IN trong truy vấn tiêu chí. Nhưng tôi không biết liệu nó có hiệu quả với nhiều bản ghi trong danh sách kết quả không. Vì vậy, nếu tôi không thể làm điều đó trên cấp API tiêu chuẩn, tôi nghĩ rằng có lẽ tôi bằng cách nào đó có thể ảnh hưởng đến quá trình biến đổi SQL và đặt SQL của tôi ở một nơi thích hợp nhưng dường như là không thể. Vì vậy, câu hỏi thực sự của tôi là: là nó bằng cách nào đó có thể có quyền truy cập vào mã SQL của truy vấn, sau giai đoạn phát sinh SQL nhưng trước khi thực hiện truy vấn thực tế hay chưa? Chỉ cần thao tác với thủ công? Nó có thể được thực hiện một cách an toàn và đơn giản nhất có thể không?
Hoặc có thể chỉ cần phân tích cú pháp SQL này do người dùng viết và sử dụng nó trong truy vấn tiêu chí?
Thay đổi truy vấn tiêu chí hiện có thành truy vấn SQL nguyên gốc là không được thảo luận.
Không, bạn không thể sử dụng SQL với Tiêu chuẩn JPA - Tiêu chuẩn JPA là để viết JPQL. Nếu một số thực hiện "cung cấp" nó như là một phần mở rộng sau đó bạn mất tính di động. Theo thông số JPA –