2012-01-19 30 views
18

khi nào sử dụng tiêu chí tách rời? và lợi thế chúng ta nhận được bằng cách sử dụng tiêu chí tách rời thay vì tiêu chí bình thường là gì?khi nào sử dụng tiêu chí tách rời trong ngủ đông?

Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Some.class); 


DetachedCriteria criteria = DetachedCriteria.forClass(Some.class); 

Cảm ơn!

+1

http://docs.jboss.org/hibernate/core/3.3/reference/en/html /querycriteria.html#querycriteria-detachedqueries – Reddy

Trả lời

16

Theo docs

Một số ứng dụng cần phải tạo ra các tiêu chí truy vấn trong "chế độ tách ra", nơi phiên Hibernate không có sẵn. Lớp này có thể là được khởi tạo ở mọi nơi và sau đó có thể lấy Tiêu chí bằng cách chuyển phiên tới getExecutableCriteria(). Tất cả các phương thức đều có cùng ngữ nghĩa và hành vi như các phương pháp tương ứng của giao diện Tiêu chí .

+3

Bị đánh cắp từ [tài liệu] (https://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/criterion/DetachedCriteria.html). –

10

'tách rời khỏi đối tượng session'

Tiêu chuẩn tách rời có thể được sử dụng trong hai kịch bản:

  1. Xây dựng tiêu chí truy vấn không có đối tượng session:
    phiên chỉ yêu cầu trong quá trình thực hiện truy vấn/nộp truy vấn cơ sở dữ liệu, không phải trong khi xây dựng truy vấn.

    Ex:

    DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Department.class); 
        detachedCriteria.add(Restrictions.eq("DEPTID", 1)); 
        ProjectionList projectionList = Projections.projectionList(); 
        projectionList.add(Projections.property("DEPTID")); 
        detachedCriteria.setProjection(projectionList); 
    
        //Add more 
        ............................. 
    

    Trong đoạn mã trên để bạn tìm thấy bất kỳ sự cần thiết của việc có đối tượng session cho việc xây dựng như một truy vấn tiêu chí? hoàn toàn KHÔNG.

  2. Xây dựng cùng một truy vấn tiêu chí cho nhiều lần:
    Xây dựng nó một lần bất kể đối tượng phiên và có thể được sử dụng bất cứ khi nào/bất cứ nơi nào bạn muốn.

Cuối cùng khi đối tượng session có sẵn, sử dụng các truy vấn trên với phiên như sau:

detachedCriteria.getExecutableCriteria(session).list(); 
Các vấn đề liên quan