论坛首页 Java企业应用论坛

Hibernate的检索方式

浏览 4978 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-07-11  
大家知道,Hibernate的检索方式有很多
对象图的导航检索,load/get检索,HQL(find,Query)检索,QBC(Criteria,QBE)检索以及本地数据库SQL检索.
那么,在实际应用中到底选择哪一种检索好?它们之间的检索有哪些联系和区别呢?希望有过此经验的高手可以谈谈,给我一点心得和体会,好吗? [b][/b]
   发表时间:2005-07-11  
各种查询的优点和缺点各不相同。

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。
0 请登录后投票
   发表时间:2005-07-11  
我是几乎凡是统计都用sql(尽量用标准SQL).其余的都用HQL,因为动态查询,有一套自己的框架(烂东西,用用,省省工作量),嘻
0 请登录后投票
   发表时间:2005-08-01  
xiaoyu 写道
我是几乎凡是统计都用sql(尽量用标准SQL).其余的都用HQL,因为动态查询,有一套自己的框架(烂东西,用用,省省工作量),嘻


老兄是不是在用反射动态构造hql啊,呵呵,我用过感觉很痛苦,特别是在有组合pk的情况下
0 请登录后投票
   发表时间:2005-08-01  
KayMO 写道
xiaoyu 写道
我是几乎凡是统计都用sql(尽量用标准SQL).其余的都用HQL,因为动态查询,有一套自己的框架(烂东西,用用,省省工作量),嘻


老兄是不是在用反射动态构造hql啊,呵呵,我用过感觉很痛苦,特别是在有组合pk的情况下


不是的......

如果是取单个对象,是用DAO的方法...只要查询页面的查询才用这个
0 请登录后投票
   发表时间:2005-08-01  
可以自己构造查询对象,把Hibernate3的Projections跟Criteria再封装一层,所实现的动态查询应该可以满足多数需要。用起来就很舒服了……
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics