2012-09-29 29 views
32

Tôi nhận được List<Strings> bằng cách thực hiện truy vấn. Điều này phải được chuyển cho một truy vấn khác của các giá trị khoản IN. Làm thế nào để vượt qua chúng trong HQL?chuyển danh sách sang mệnh đề IN trong HQL hoặc SQL?

Chúng tôi có thể chuyển đổi List thành Array và có thể vượt qua, đó không phải là vấn đề.

Cuối cùng, tôi phải chuyển danh sách ở dạng List<String> hoặc Array hoặc String thành điều khoản IN.

Trả lời

66
from AUTOS a where a.model in (select m.model from MODELS m) 

hoặc

Query query1 = session.createQuery("select s.id from Salary s where s.salary < 50000 AND s.salary > 49980"); 
Query query2 = session.createQuery("from Employee e where e.id in (:ids)").setParameterList("ids", query1.list()); 
query2.list(); 
+0

Điều này cũng hoạt động với ID kết hợp? – rexdefuror

+2

Đây là câu trả lời hay, tuy nhiên không hoạt động đối với bộ sưu tập trống. – Jagger

+0

là nó có thể làm điều đó với 1 truy vấn? như trong sql với các truy vấn phụ? – tObi

3

Tôi biết nó được một lúc và bạn đã cố gắng để vượt qua giá trị của một truy vấn khác nhau như một queryParameter, bạn cũng có thể đi vào thiết lập hoặc các bộ sưu tập tại khoản trong HQL với 'yếu tố()' - đây là một ví dụ đơn giản về cách sử dụng đó: Hibernate query: does a Set contains a certain Object?

+0

Điều này sẽ làm điều tương tự .. cảm ơn bạn đã trả lời ngay cả nó đã muộn .. hữu ích cho người khác .. –

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