Когда использовать отдельные критерии в спящем режиме?

Когда использовать отдельные критерии? и какое преимущество мы получаем, используя отдельные критерии вместо обычных критериев?

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


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

Спасибо!

2 ответа

Решение

Согласно документам

Некоторые приложения должны создавать запросы критериев в "отдельном режиме", где сеанс Hibernate недоступен. Этот класс может быть создан в любом месте, а затем Критерии могут быть получены путем передачи сеанса в getExecutableCriteria(), Все методы имеют ту же семантику и поведение, что и соответствующие методы интерфейса Criteria.

"Отсоединено от объекта сеанса"

Отдельные критерии могут использоваться в двух сценариях:

  1. Запрос критериев построения без объекта сеанса:
    Сеанс требуется только во время выполнения запроса / отправки запроса в базу данных, а не при создании запроса.

    Пример:

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

    В приведенном выше коде вы обнаружите необходимость наличия объекта сеанса для построения запроса такого критерия? абсолютно нет.

  2. Построение одного и того же критерия запроса несколько раз:
    Создайте его один раз, независимо от объекта сеанса, и его можно использовать всегда и везде.

Наконец, когда объект сеанса доступен, используйте вышеуказанный запрос с сеансом следующим образом:

detachedCriteria.getExecutableCriteria(session).list();
Другие вопросы по тегам