我正在开发一个基于 Struts2 Framework 实现MVC的Web应用程序,以及 Hibernate3 ,用于通过 DAO 访问数据库和 DTO 用于映射数据库中的关系对象。在Hibernate上下文中,我想知道 Criteria Clases 对于进行复杂查询的范围,以及是否还有其他选项来执行此类任务?
感谢。
答案 0 :(得分:3)
通过“覆盖”,我假设您指的是复杂的,与SQL相关的查询的域,可以通过特定的Criteria对象链接方法调用来构建(如here所述)。
根据我的经验,大多数依赖于结果过滤,排序,投影,分组,逻辑连接或析取语句或子查询的常见任务都可以通过以预期方式改变Criteria
对象来执行。
作为替代方法,您可以使用Session.createSQLQuery
构建原始SQL查询,然后使用Query.list
或Query.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();
显然,你会想要从这个天真的例子中扩展,但你明白了。