Я новичок в запросах гибернации и пытаюсь понять, как все работает. Я использую 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 только тогда, когда вам нужно написать его вручную из соображений типа производительности. Я близко?