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

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

В чем разница между критериями и отдельными критериями? Когда мы должны пойти на критерии и когда мы должны пойти на отдельные критерии?

4b9b3361

Ответ 1

Отсоединенные критерии позволяют создавать запрос без Session. Затем вы можете выполнить поиск в произвольном сеансе.

На самом деле вы должны тщательно продумать, когда используете detached criteria используя другой или новый сеанс (без кеширования и создания сеанса).

Они наиболее полезны для условий соединения, подвыборов и запросов вне текущего сеанса.

Другое распространенное использование для повторного использования кода. Многие разработчики объявляют их как static запросы и выполняют их, используя базовый сеанс из разных DAO.

Ответ 2

Использование DetachedCriteria в точности совпадает с критерием, за исключением того, что вы можете сделать первоначальное создание и настройку своего запроса без доступа к сеансу. Когда придет время для запуска вашего запроса, вы должны преобразовать его в исполняемый запрос с помощью getExecutableCriteria(session).

Это полезно, если вы строите сложные запросы, возможно, через многоэтапный процесс, потому что вам не нужен доступ к сеансу повсюду. Вам потребуется только сеанс на последнем этапе при выполнении запроса.

Под капотом DetachedCriteria использует CriteriaImpl, который является тем же классом, который вы получаете, если вы вызываете session.createCriteria().

Ответ 3

-Открытые критерии очень хороши, если сеанс спящего режима отсутствует.

- критерии находятся в режиме онлайн, а это означает, что он использует объект класса Session. Но отключенные критерии недоступны, потому что он не требует сеанса.

-Когда критерии отсоединения позволяют повторно использовать код.

public static void main(String [] args) throws Exception {
    AnnotationConfiguration cfg = new AnnotationConfiguration();
    cfg.configure("hibernate.cfg.xml");
    SessionFactory factory = cfg.buildSessionFactory();
    Session session = factory.openSession();

    System.out.println("By using criteria");

    Criteria cr=session.createCriteria(Student.class);
    cr.add(Restrictions.eq("gender", "male"));
    cr.addOrder(Order.asc("stud_id"));
    List<Student> res=((Criteria) cr).list();
    for(int i=0;i<res.size();i++)
    {
        System.out.print( res.get(i).getStud_id()+"\t");
        System.out.println(res.get(i).getName());
    }

    System.out.println("\n\nBy using Detached criteria");
    DetachedCriteria dcr = DetachedCriteria.forClass(Student.class).add(Property.forName("gender").eq("male"));
    dcr.addOrder(Order.desc("stud_id"));
    List<Student> results = dcr.getExecutableCriteria(session).list();
    for(int i=0;i<results.size();i++)
    {
        System.out.print( results.get(i).getStud_id()+"\t");
        System.out.println(results.get(i).getName());
    }

Нажмите здесь для заметок о реализации.

Ответ 4

Просто выступать в качестве напоминания. Если вы используете Spring и выбираете использовать HibernateTemplate, он не предоставляет метод createCriteria().

Вы найдете только DetachedCriteria.

См. также:

HibernateTemplate javadoc