我对新的hibernate查询,并试图掌握如何一切工作。我在Netbeans 6.5中使用Hibernate 3。使用Hibernate查询
我有一个基本的项目建立,并一直在玩如何做一切。我从本质上开始搜索查询。用户可以在一个或多个字段中输入值。
为了示例的目的,该表将是具有列first_name,middle_name,last_name的Person。
我发现的第一种方式是有把名字,中间名,和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时,为了性能类型的原因,您应该只使用Query。我关门了吗?
只是说明一下,你的Expression.ge应该可能是Expression.eq – 2010-03-23 16:54:46
谢谢。我会说这是一个错字,但这将是一个谎言。我想知道要'ge'代表。那里有各种各样的东西。再次感谢。 – 2010-03-23 18:03:16
“ge”代表“大于或等于”。 – 2010-03-23 19:58:19