Подтвердить что ты не робот

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

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

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


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

Спасибо!

4b9b3361

Ответ 1

По docs

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

Ответ 2

'Отдельно от объекта сеанса'

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

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

    Пример:

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

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

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

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

detachedCriteria.getExecutableCriteria(session).list();