2011-10-27 25 views
22

Nếu truy vấn của tôi chứa một lớp, như:Hibernate: Làm thế nào để có được kết quả từ truy vấn với nhiều lớp

query = session.createQuery("select u from User as u"); 
queryResult = query.list(); 

sau đó tôi lặp nó, nơi queryResult là một đối tượng của lớp User.

Vậy làm cách nào để nhận kết quả từ truy vấn chứa nhiều lớp? Ví dụ:

select u, g from User as u, Group as g where u.groupId = g.groupId and g.groupId = 1 
+1

Câu trả lời hay nhất ở đây http://stackoverflow.com/questions/5435304/how-to-override-hibernate-fetching-strategy-at-runtime –

Trả lời

25
for (Object[] result : query.list()) { 
    User user = (User) result[0]; 
    Group group = (Group) result[1]; 
} 
+2

cảm ơn! nhưng 'Danh sách 'phải là – yaya

5

Bạn có thể làm điều đó bằng Tuples Tôi tin, nhưng quan trọng hơn, nếu Group và tài khoản của bạn có liên quan như truy vấn mà dường như cho thấy Người sử dụng cần có một trường Group (không sử dụng groupId tại của bạn Người dùng lớp, hibernate nên sắp xếp này ra cho bạn). Nếu đó là trường hợp bạn chỉ có thể truy vấn nó bằng cách sử select u from User u join fetch u.group g where g.groupId = :id (sau đó thiết lập id sử dụng query.setParameter(1, id);.

Từ khóa fetch trong truy vấn mà làm cho nó một tải háo hức vì vậy cả hai đối tượng sẽ được trả lại cho ngủ đông mà sẽ trả về đối tượng người dùng cho bạn . Truy cập các đối tượng sử dụng Nhóm user.getGroup().

+0

Tôi nghĩ rằng đây là cách đúng, nhưng tôi đã có một số trình phân tích cú pháp lỗi: mong đợi "tất cả", tìm thấy 'tham gia' và mong đợi "bởi", tìm thấy 'ở đâu' – yaya

+0

Đó là 'tham gia tìm nạp' thay vì' tìm nạp', lỗi của tôi. Sửa nó ngay bây giờ. – Thor84no

0

Ngoài ra bạn có thể tạo một constructor và trả về một đối tượng:

Giả sử rằng các gia đình tầng lớp có một constructor thích hợp - như một typesafe Java đối tượng thực tế:

select new Family(mother, mate, offspr) 
from DomesticCat as mother 
join mother.mate as mate 
left join mother.kittens as offspr 

Hoặc danh sách:

select new list(mother, offspr, mate.name) 
from DomesticCat as mother 
inner join mother.mate as mate 
left outer join mother.kittens as offspr 

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-select

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