Когда использовать изолированные критерии в спящем режиме?
когда использовать отдельные критерии? и каково преимущество, которое мы получаем с помощью отстраненных критериев вместо обычных критериев?
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Some.class);
DetachedCriteria criteria = DetachedCriteria.forClass(Some.class);
Спасибо!
Ответы
Ответ 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();