Hibernate的檢索方式
Q:Hibernate的檢索方式有很多
對(duì)象圖的導(dǎo)航檢索,load/get檢索,HQL(find,Query)檢索,QBC(Criteria,QBE)檢索以及本地?cái)?shù)據(jù)庫(kù)SQL檢索.
那么,在實(shí)際應(yīng)用中到底選擇哪一種檢索好?它們之間的檢索有哪些聯(lián)系和區(qū)別呢?
A:(by Robbin)HQL功能最強(qiáng)大,適合各種情況,但是動(dòng)態(tài)條件查詢構(gòu)造起來(lái)很不方便
Criteria最適合動(dòng)態(tài)條件查詢,不太適合統(tǒng)計(jì)查詢,QBE還不夠強(qiáng)大,只適合相當(dāng)簡(jiǎn)單的查詢
NativeSQL可以實(shí)現(xiàn)特定數(shù)據(jù)庫(kù)的SQL,但是可移植性就犧牲了
Hibernate2的Criteria功能不夠完善,所以Hibernate2上面可用的只有HQL和NativeSQL,Hibernate3的Criteria已經(jīng)非常強(qiáng)大了。
我的選擇原則是:
針對(duì)web應(yīng)用來(lái)說(shuō),大部分常規(guī)查詢都是動(dòng)態(tài)條件查詢,所以首選使用Criteria,并且Hibernate3提供了DetachedCriteria,可以在web層構(gòu)造好DetachedCriteria再進(jìn)入session執(zhí)行查詢,非常方便實(shí)用的特性。
但是涉及到統(tǒng)計(jì)查詢和非常復(fù)雜的關(guān)聯(lián)查詢,Criteria就無(wú)能為力了,這種情況下我選擇使用HQL。
最后如果必須使用某些數(shù)據(jù)庫(kù)的特性,例如Oracle的"...connect with ... by"這樣的SQL,則選擇使用NativeSQL。
對(duì)象圖的導(dǎo)航檢索,load/get檢索,HQL(find,Query)檢索,QBC(Criteria,QBE)檢索以及本地?cái)?shù)據(jù)庫(kù)SQL檢索.
那么,在實(shí)際應(yīng)用中到底選擇哪一種檢索好?它們之間的檢索有哪些聯(lián)系和區(qū)別呢?
A:(by Robbin)HQL功能最強(qiáng)大,適合各種情況,但是動(dòng)態(tài)條件查詢構(gòu)造起來(lái)很不方便
Criteria最適合動(dòng)態(tài)條件查詢,不太適合統(tǒng)計(jì)查詢,QBE還不夠強(qiáng)大,只適合相當(dāng)簡(jiǎn)單的查詢
NativeSQL可以實(shí)現(xiàn)特定數(shù)據(jù)庫(kù)的SQL,但是可移植性就犧牲了
Hibernate2的Criteria功能不夠完善,所以Hibernate2上面可用的只有HQL和NativeSQL,Hibernate3的Criteria已經(jīng)非常強(qiáng)大了。
我的選擇原則是:
針對(duì)web應(yīng)用來(lái)說(shuō),大部分常規(guī)查詢都是動(dòng)態(tài)條件查詢,所以首選使用Criteria,并且Hibernate3提供了DetachedCriteria,可以在web層構(gòu)造好DetachedCriteria再進(jìn)入session執(zhí)行查詢,非常方便實(shí)用的特性。
但是涉及到統(tǒng)計(jì)查詢和非常復(fù)雜的關(guān)聯(lián)查詢,Criteria就無(wú)能為力了,這種情況下我選擇使用HQL。
最后如果必須使用某些數(shù)據(jù)庫(kù)的特性,例如Oracle的"...connect with ... by"這樣的SQL,則選擇使用NativeSQL。
posted on 2005-08-09 21:21 辰 閱讀(389) 評(píng)論(0) 編輯 收藏 所屬分類: Hibernate