我是 hibernate 查询的新手,并试图了解一切是如何工作的。我在 Netbeans 6.5 中使用 Hibernate 3。
我设置了一个基本项目,并一直在研究如何做所有事情。我从本质上是一个搜索查询开始。用户可以在其中将值输入一个或多个字段。
为了示例,该表将是具有 first_name、middle_name、last_name 列的 Person。
我找到的第一个方法是使用一个以 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 是首选方式,您应该只在出于性能类型原因需要手动编写查询时才使用查询。我接近了吗?
最佳答案
Criteria 是首选方式。它在后台使用Prepared Statements,因此您无需担心SQL注入(inject)。
关于java - 使用 Hibernate 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2501062/