2010-05-10 26 views
5

Tôi muốn có một truy vấn kết hợp cho hai lớp liên tục.Hibernate Criteria API tương đương với mệnh đề lựa chọn HQL?

Trong HQL này có thể được thực hiện bằng mệnh đề select,

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

Trong ví dụ trên, Gia đình là một lớp conbined với DemesticCat như construtor nó params

Tiêu chuẩn tương đương của HQL là gì chọn mệnh đề?

Trả lời

5

Bạn sẽ phải sử dụng số ResultTransformer cho việc này. Các bài viết trên blog Hibernate 3.2: Transformers for HQL and SQL đưa ra ví dụ sau (nơi StudentDTO là một tổ chức phi thực thể Bean):

List resultWithAliasedBean = s.createCriteria(Enrolment.class) 
    .createAlias("student", "st").createAlias("course", "co") 
    .setProjection(Projections.projectionList() 
        .add(Projections.property("st.name"), "studentName") 
        .add(Projections.property("co.description"), "courseDescription") 
     ) 
      .setResultTransformer(Transformers.aliasToBean(StudentDTO.class)) 
      .list(); 

StudentDTO dto = (StudentDTO)resultWithAliasedBean.get(0); 
+0

Cảm ơn rất nhiều! Đó chính xác là những gì tôi đang tìm kiếm! Có vẻ Tiêu chí gần như mạnh mẽ như HQL. Cảm ơn! –

1

Trong API tiêu chí, chức năng này được xử lý bởi Projections. Tài liệu này hơi khó hiểu và quá phức tạp, nhưng đó là những gì bạn cần xem xét.

+0

skaffman: nhờ cho câu trả lời nhanh chóng của bạn. Tôi chỉ tóm tắt phần Projections và thấy rằng PropProjection.Property.forName ("name") có thể được sử dụng để lọc một tập hợp con cột là kết quả, Nhưng tôi không thể tìm thấy Bản chiếu. lớp học vào một lớp học mới, như lớp Gia đình trong ví dụ trên? Bạn có thể làm sáng tỏ điều đó không? –

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