Q:Hibernate的检索方式有很多
对象图的导航检索,load/get检索,HQL(find,Query)检索,QBC(Criteria,QBE)检索以及本地数据库SQL检索.
那么,在实际应用中到底选择哪一种检索好?它们之间的检索有哪些联系和区别呢?
A:(by Robbin)HQL功能最强大,适合各种情况,但是动态条件查询构造起来很不方便
Criteria最适合动态条件查询,不太适合统计查询,QBE还不够强大,只适合相当简单的查询
NativeSQL可以实现特定数据库的SQL,但是可移植性就牺牲了
Hibernate2的Criteria功能不够完善,所以Hibernate2上面可用的只有HQL和NativeSQL,Hibernate3的Criteria已经非常强大了。
我的选择原则是:
针对web应用来说,大部分常规查询都是动态条件查询,所以首选使用Criteria,并且Hibernate3提供了DetachedCriteria,可以在web层构造好DetachedCriteria再进入session执行查询,非常方便实用的特性。
但是涉及到统计查询和非常复杂的关联查询,Criteria就无能为力了,这种情况下我选择使用HQL。
最后如果必须使用某些数据库的特性,例如Oracle的"...connect with ... by"这样的SQL,则选择使用NativeSQL。