2012-01-19 15 views
18

kiedy używać oddzielnych kryteriów? i jaka jest korzyść, którą uzyskujemy, stosując oderwane kryteria zamiast normalnych kryteriów?kiedy używać haseł w trybie hibernacji?

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


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

Dzięki!

+1

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

Odpowiedz

16

Zgodnie docs

Niektóre aplikacje potrzebne do tworzenia kryteriów zapytań w trybie „odłączonym”, gdzie sesja Hibernate nie jest dostępna. Ta klasa może być utworzona w dowolnym miejscu, a następnie można uzyskać Kryteria, przekazując sesję do getExecutableCriteria(). Wszystkie metody mają tę samą semantykę i zachowanie jak odpowiadające im metody interfejsu Criteria .

+3

Skradzione z [docs] (https://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/criterion/DetachedCriteria.html). –

10

„Oderwane od obiektu sesji”

wolnostojące kryteria mogą być używane w dwóch scenariuszach: Kryteria

  1. Budowlanej zapytania bez obiektu sesji:
    Session wymaga jedynie podczas wykonywania kwerendy/złożeniu zapytanie do bazy danych, a nie podczas budowania zapytania.

    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 
        ............................. 
    

    W powyższym kodzie nie można znaleźć żadnej konieczności posiadania obiektu sesji dla budowy takiego zapytania kryteria? absolutnie nie.

  2. Wielokrotne pytanie o to samo kryterium:
    Zbuduj je raz niezależnie od obiektu sesji i można z niego korzystać, kiedy tylko chcesz.

Wreszcie gdy obiekt sesji nie jest dostępny, należy użyć powyższej kwerendy z sesji w następujący sposób:

detachedCriteria.getExecutableCriteria(session).list(); 
Powiązane problemy