2011-09-21 33 views

Trả lời

74

Chúng không loại trừ lẫn nhau, bạn có thể sử dụng cả hai cùng một lúc. Các dự báo thường được sử dụng trong ngữ cảnh của một số Tiêu chí.

Để đặt nó đơn giản, Hibernate Projections được sử dụng để chỉ truy vấn một tập con của các thuộc tính của một thực thể hoặc nhóm các thực thể bạn đang truy vấn với tiêu chí. Bạn cũng có thể sử dụng Phép chiếu để chỉ định các mệnh đề distinct và tổng hợp như max, sum và v.v. Nó giống như đề cập đến số trong đó dữ liệu bạn đang tìm nạp. Giống như sửa đổi mệnh đề select trong truy vấn SQL.

Tiêu chí Hibernate được sử dụng để xác định các điều kiện dữ liệu phải thỏa mãn để được chọn. Nó giống như đề cập đến cách là dữ liệu bạn đang tìm nạp. Giống như sửa đổi các mệnh đề fromwhere của truy vấn SQL.

Lưu ý rằng điều này cách không đúng, đó chỉ là định hướng nhằm hỗ trợ OP. Bạn có thể thay đổi trong đó dữ liệu bạn đang tìm nạp với createCriteria(String associationPath) chẳng hạn.

tôi muốn đề nghị để có một cái nhìn vào bài viết này Hibernate: Criteria Queries in Depth

+2

Và nó rất hữu ích để đếm() như -> return (Số) session.createCriteria ("Book"). SetProjection (Projections.rowCount()). UniqueResult(); –

1

chiếu là một giao diện được đưa ra trong gói “org.hibernate.criterion”, dự báo là một lớp được đưa ra trong cùng một gói, thực sự chiếu là một giao diện, và Projections là một lớp và là một nhà máy sản xuất các đối tượng chiếu.

Trong lớp Dự đoán, chúng tôi có tất cả các phương thức tĩnh và mỗi phương thức của lớp này trả về đối tượng Giao diện chiếu.

Nếu chúng ta muốn thêm một đối tượng chiếu để tiêu thì chúng ta cần phải gọi một phương thức setProjection()

Hãy nhớ rằng, trong khi thêm đối tượng dự báo tiêu chí, nó có thể để thêm một đối tượng tại một thời điểm.Nó có nghĩa là nếu chúng ta thêm đối tượng chiếu thứ hai thì thứ hai thứ hai sẽ ghi đè đối tượng đầu tiên (đầu tiên sẽ không hoạt động), vì vậy tại một thời điểm chúng ta chỉ có thể một đối tượng chiếu đối tượng tiêu chí. đối tượng cục bộ từ cơ sở dữ liệu, sau đó chúng ta cần tạo một đối tượng dự báo cho tài sản đó phải được nạp từ cơ sở dữ liệu

Criteria crit = session.createCriteria(Products.class); 
crit.setProjection(Projections.proparty("proName")); 
List l=crit.list(); 
Iterator it=l.iterator(); 
while(it.hasNext()) 
{ 
    String s = (String)it.next(); 
    // ---- print ----- 
} 

Nếu chúng ta thêm nhiều dự báo tiêu chí sau đó chiếu cuối cùng được thêm vào sẽ được xem xét để thực hiện thấy ...

Criteria crit = session.createCriteria(Products.class); 

Projection p1 = Projection.property("proName"); 
Projection p2 = Projection.property("price"); 

crit.setProjection(p1): 
crit.setProjection(p2): 
List l=crit.list(); 
+1

Làm cách nào để trả lời câu hỏi này? – 000

+1

liên kết đến http://www.java4s.com/hibernate/working-with-hibernate-projections-in-criteria/ gốc –

0

dự được sử dụng để thực hiện các hoạt động tổng hợp và để có được truy vấn cột duy nhất, với hạn chế chúng ta có thể truy cập vào một ROW nhưng với DỰ BÁO chúng ta có thể truy cập vào toàn bộ COLUMN

EX -

public static void main(String[] args) { 
    SessionFactory factory = new Configuration().configure().addAnnotatedClass(Student.class).buildSessionFactory(); 
    Session session = factory.getCurrentSession(); 
    try { 
     session.beginTransaction(); 
     Criteria c = session.createCriteria(Student.class); 
     Projection p = Projections.property("lastName"); 
     List<String> students = c.setProjection(p).list(); 
     for(String s:students) 
      System.out.println(s); 
     session.getTransaction().commit(); 
     session.close(); 
    } finally { 
     factory.close(); 
    } 
} 

Ở phía trên ví dụ tôi đã sử dụng lệnh gọi chiếu để thêm thuộc tính chiếu "tên" vào tiêu chí. Nó trả về winchester winchester winchester winchester, đó là lastName COLUMN trong bảng.

Output =

Hibernate: chọn this_.last_name như y0_ từ sinh viên this_ winchester winchester winchester winchester

Note - Chúng tôi chỉ có thể thêm một dự báo, nếu chúng ta thêm nhiều hơn 1 phép chiếu trước đó sẽ bị ghi đè. nếu bạn muốn thêm nhiều hơn một chiếu bạn sẽ Nedd lớp ProjectionList

Orignal Bảng -

enter image description here

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