Hibernate Criteria用于对数据库进行复杂查询的类

时间:2010-12-05 01:33:30

标签: java hibernate struts2 nhibernate-mapping

我正在开发一个基于 Struts2 Framework 实现MVC的Web应用程序,以及 Hibernate3 ,用于通过 DAO 访问数据库和 DTO 用于映射数据库中的关系对象。在Hibernate上下文中,我想知道 Criteria Clases 对于进行复杂查询的范围,以及是否还有其他选项来执行此类任务?

感谢。

1 个答案:

答案 0 :(得分:3)

通过“覆盖”,我假设您指的是复杂的,与SQL相关的查询的域,可以通过特定的Criteria对象链接方法调用来构建(如here所述)。

根据我的经验,大多数依赖于结果过滤,排序,投影,分组,逻辑连接或析取语句或子查询的常见任务都可以通过以预期方式改变Criteria对象来执行。

作为替代方法,您可以使用Session.createSQLQuery构建原始SQL查询,然后使用Query.listQuery.executeUpdate来执行它。例如:

Sesion sess = getSession();
Query mySelect = sess.createSQLQuery("SELECT * from foo");
List<Entity> results = mySelect.list();

Query myUpdate = sess.createSQLQuery("DELETE * from foo where bar = \"boz\"");
int updateCount = myUpdate.executeUpdate();

显然,你会想要从这个天真的例子中扩展,但你明白了。