Working with Hibernate Queries
Posted
by jschoen
on Stack Overflow
See other posts from Stack Overflow
or by jschoen
Published on 2010-03-23T15:18:21Z
Indexed on
2010/03/23
15:23 UTC
Read the original article
Hit count: 389
I am new to hibernate queries, and trying to get a grasp on how everything works. I am using Hibernate 3 with Netbeans 6.5.
I have a basic project set up and have been playing around with how to do everything. I started with essentially a search query. Where the user can enter values into one or more fields.
The table would be Person with the columns first_name, middle_name, last_name for the sake of the example.
The first way I found was to have a method that took firstName, middleName, and lastName as parameters:
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();
This did not sit well with me, since it seemed like I should not have to write that much, and well, that I was doing it wrong. So I kept digging and found another way:
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
Transaction tx = session.beginTransaction();
Criteria crit = session.createCriteria(Person.class);
if (firstName != null) {
crit.add(Expression.ge("firstName", firstName);
}
if (middleName != null) {
crit.add(Expression.ge("middleName", middleName);
}
if (lastName != null) {
crit.add(Expression.ge("lastName", lastName);
}
List<Person> results = (List<Person>) crit.list();
So what I am trying to figure out is which way is the preferred way for this type of query? Criteria or Query? Why?
I am guessing that Criteria is the preferred way and you should only use Query when you need to write it by hand for performance type reasons. Am I close?
© Stack Overflow or respective owner