2013-04-27 31 views
14

Giả i có HQL sauSử dụng Hibernate tên tham số hai lần

EntityManager.createQuery("SELECT a FROM a WHERE a.b = :par OR a.c = :par").setParameter("par", obj); 

dường như không làm việc. Có ai có một ý tưởng làm thế nào để giải quyết vấn đề này vẫn chỉ sử dụng một tham số?

+0

Bạn gặp phải lỗi gì? –

+0

Không có lỗi. Danh sách kết quả chỉ trống. – DmiN

+0

bạn có dữ liệu hợp lệ không? cố gắng kích hoạt - showsql = true trong persistence.xml và lấy dữ liệu sql thô – Sanath

Trả lời

20
setParameter(String name,Object val) 

Điều này được sử dụng để liên kết giá trị với thông số được đặt tên. Nhưng một tên có thể xảy ra nhiều lần trong một truy vấn không quan trọng. Vì vậy, hãy kiểm tra xem liệu bạn có thực sự dữ liệu cho truy vấn đó hay không.

kiểm tra các tài liệu here

Một số nội dung chính của tài liệu mà

tham số truy vấn tên là thẻ có dạng: tên trong chuỗi truy vấn. Giá trị được liên kết với tham số nguyên: foo bằng cách gọi setParameter ("foo", foo, Hibernate.INTEGER); Ví dụ: . Tên có thể xuất hiện nhiều lần trong chuỗi truy vấn.

Nếu vẫn u không nhận được kết quả sau đó chỉ cần cố gắng với việc sử dụng hai tên và đặt nó

EntityManager.createQuery ("SELECT a từ một nơi ab =: par1 HOẶC ac =: par2") .setParameter ("par1", obj) .setParameter ("par2", obj);

+0

Điều này hoàn toàn đúng. Dường như truy vấn đã bị hỏng. DBMS có một danh sách kết quả rỗng thông qua bản địa sql quá. +1 Đối với mô tả hay này – DmiN

Các vấn đề liên quan