Когда использовать отдельные критерии в спящем режиме?
Когда использовать отдельные критерии? и какое преимущество мы получаем, используя отдельные критерии вместо обычных критериев?
Criteria criteria = sessionFactory.getCurrentSession().createCriteria(Some.class);
DetachedCriteria criteria = DetachedCriteria.forClass(Some.class);
Спасибо!
2 ответа
Согласно документам
Некоторые приложения должны создавать запросы критериев в "отдельном режиме", где сеанс Hibernate недоступен. Этот класс может быть создан в любом месте, а затем Критерии могут быть получены путем передачи сеанса в
getExecutableCriteria()
, Все методы имеют ту же семантику и поведение, что и соответствующие методы интерфейса Criteria.
"Отсоединено от объекта сеанса"
Отдельные критерии могут использоваться в двух сценариях:
Запрос критериев построения без объекта сеанса:
Сеанс требуется только во время выполнения запроса / отправки запроса в базу данных, а не при создании запроса.Пример:
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();