java - 使用 Hibernate 查询

标签 java hibernate hql

我是 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/

相关文章:

java - ExecutorService 关闭钩子(Hook)

java - Spring Roo (STS) - 创建名称为 'transactionManager' 的 bean 时出错

java - Hibernate - 多对多关系 : relationship table not getting populated

mysql - hibernate 查询错误

java - 在 hibernate 命名查询中调用自定义函数

java - Hibernate 查询持续时间很长

java - 使用 @RequestHeader ("Authorization") 参数但不在方法体中使用它?

java - 分配从 Java 方法返回的列表

java - 如何解决 honeSTLY 没有意义的 TransientObjectException

mysql - 查询以在一个 API 中从多个表获取数据(SpringBOOT + JPA)