2009-02-20 9 views
62

Với HQL Query sau:Hibernate HQL Query: Làm thế nào để thiết lập một bộ sưu tập như một tham số được đặt tên của một truy vấn?

FROM 
    Foo 
WHERE 
    Id = :id AND 
    Bar IN (:barList) 

tôi đặt :id sử dụng phương pháp đối tượng của Query setInteger().

Tôi muốn đặt :barList bằng cách sử dụng List đối tượng, nhưng nhìn vào tài liệu Hibernate và danh sách các phương pháp tôi không thể thấy lựa chọn rõ ràng để sử dụng. Bất kỳ ý tưởng?

Trả lời

89

Sử dụng Query.setParameterList(), Javadoc here.

Có bốn biến thể để chọn.

+0

Cảm ơn bạn đã chỉ ra điều này! Tôi hoàn toàn bỏ qua điều này khi nhìn vào JavaDoc. – karlgrz

+2

D: Oh noes, liên kết bị hỏng (... đau đớn điển hình của tài liệu JBoss) –

+2

Điều đó chỉ hoạt động nếu bạn đang sử dụng một đối tượng truy vấn ngủ đông, nhưng sẽ không hoạt động nếu bạn nhập 'javax.persistence.Query'. Chỉ cần hai xu của tôi. –

30

Tôi không chắc chắn về HQL, nhưng trong JPA bạn chỉ cần gọi truy vấn là setParameter với tham số và tập hợp.

Query q = entityManager.createQuery("SELECT p FROM Peron p WHERE name IN (:names)"); 
q.setParameter("names", names); 

nơi names là tập hợp các tên mà bạn đang tìm kiếm

Collection<String> names = new ArrayList<String(); 
names.add("Joe"); 
names.add("Jane"); 
names.add("Bob"); 
1

Trong TorpedoQuery nó trông như thế này

Entity from = from(Entity.class); 
where(from.getCode()).in("Joe", "Bob"); 
Query<Entity> select = select(from); 
+5

Làm cách nào để trả lời câu hỏi? Vui lòng không đăng liên kết đến dự án của bạn nếu họ không giải quyết trực tiếp vấn đề. – Mat

+1

Nó tạo ra một truy vấn hql với một điều kiện – xjodoin