Работа с Hibernate Queries - PullRequest
       30

Работа с Hibernate Queries

1 голос
/ 23 марта 2010

Я новичок в запросах гибернации и пытаюсь понять, как все работает. Я использую Hibernate 3 с Netbeans 6.5.

У меня есть базовый проект, и я пытаюсь понять, как все сделать. Я начал с по сути поискового запроса. Где пользователь может ввести значения в одно или несколько полей.

В качестве примера таблица будет Person с столбцами first_name, middle_name, last_name.

Первый способ, который я обнаружил, - это метод, который принял firstName, middleName и lastName в качестве параметров:

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Transaction tx = session.beginTransaction();
String query = "from Person where (first_name = :firstName or :firstName is null) "+
               "and (middle_name = :middleName or :middleName is null) "
               "and (last_name = :lastname or :lastName is null)";
Query q = session.createQuery(query);
q.setString("firstName", firstName);
q.setString("middleName", middleName);
q.setString("lastName", lastName);
List<Person> results = (List<Person>) q.list();

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

Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Transaction tx = session.beginTransaction();
Criteria crit = session.createCriteria(Person.class);
if (firstName != null) {
     crit.add(Expression.eq("firstName", firstName);
}
if (middleName != null) {
     crit.add(Expression.eq("middleName", middleName);
}
if (lastName != null) {
     crit.add(Expression.eq("lastName", lastName);
}
List<Person> results = (List<Person>) crit.list();

Итак, что я пытаюсь выяснить, какой путь является предпочтительным способом для этого типа запроса? Критерии или запрос? Почему?

Я предполагаю, что Criteria является предпочтительным способом, и вы должны использовать Query только тогда, когда вам нужно написать его вручную из соображений типа производительности. Я близко?

Ответы [ 4 ]

3 голосов
/ 23 марта 2010

Критерии является предпочтительным способом. Он использует подготовленные операторы в фоновом режиме, поэтому вам не нужно беспокоиться о внедрении SQL.

2 голосов
/ 23 марта 2010

Критерии новее. Он был введен после слоя запроса hql. Под критериями API все еще генерирует hql. Я склонен использовать API Criteria, потому что код выглядит чище и его легче поддерживать.

1 голос
/ 23 марта 2010

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

1 голос
/ 23 марта 2010

Я считаю, что написание запросов очень часто, особенно когда вы хотите делать сложные запросы, Hibernate имеет свой собственный язык запросов.

Проверка Язык запросов Hibernate HQL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...