<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 42  文章 - 71  trackbacks - 0
    <2008年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿

    隨筆檔案

    文章分類

    文章檔案

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    俺是很老土的,由于項(xiàng)目需要,現(xiàn)在才開始學(xué)習(xí)Hibernate。其實(shí)Hibernate剛出來的時(shí)候,只是大概了解了一下,知道這是一個(gè)O/R Mapping的框架。但是具體怎么用,能夠做到什么樣子,沒有一個(gè)具體的認(rèn)識(shí)。現(xiàn)在從頭學(xué)起,按照《Hibernate參考手冊(cè)》提供的例子Step by Step做。做到Person和Event關(guān)聯(lián)的時(shí)候,手冊(cè)上給出的代碼如下:

    Session s = HibernateUtil.getSessionFactory().getCurrentSession();
    s.beginTransaction();
    Person p = (Person)s.load(Person.class, personId);
    Event e = (Event)s.load(Event.class, eventId);
    p.getEvents().add(e);
    s.getTransaction().commit();

    很簡單,很優(yōu)美的代碼哦,看起來很OO。這個(gè)代碼實(shí)現(xiàn)的需求也很簡單,就是將一個(gè)Person和一個(gè)Event關(guān)聯(lián)起來。

    但是當(dāng)我看到輸出的SQL語句時(shí)就愣住了:

    Hibernate:
        select
            person0_.id as id1_0_,
            person0_.age as age1_0_,
            person0_.firstname as firstname1_0_,
            person0_.lastname as lastname1_0_
        from
            T_PERSON person0_
        where
            person0_.id=?
    Hibernate:
        select
            events0_.PERSON_ID as PERSON1_1_,
            events0_.EVENT_ID as EVENT2_1_,
            event1_.id as id0_0_,
            event1_.FIRE_DATE as FIRE2_0_0_,
            event1_.title as title0_0_
        from
            T_PERSON_EVENT events0_
        left outer join
            T_EVENT event1_
                on events0_.EVENT_ID=event1_.id
        where
            events0_.PERSON_ID=?
    Hibernate:
        insert
        into
            T_PERSON_EVENT
            (PERSON_ID, EVENT_ID)
        values
            (?, ?)

     

    姑且先不評(píng)價(jià)Hibernate生成的SQL語句的效率如何,就這個(gè)功能需求而言,映射到數(shù)據(jù)庫上的操作就是在T_PERSON_EVENT表中插入一行。但是Hibernate卻執(zhí)行了3個(gè)SQL語句!如果只是在寫一段Demo的代碼,這樣無所謂,但是如果是真的在有大量數(shù)據(jù)的生產(chǎn)系統(tǒng)上運(yùn)行的話,我相信前面兩個(gè)SELECT語句的消耗會(huì)比最后一個(gè)INSERT語句多得多。請(qǐng)不要對(duì)我說:可以在硬件上優(yōu)化,可以在數(shù)據(jù)庫進(jìn)行優(yōu)化。這個(gè)不是同一個(gè)問題。做為程序而言,應(yīng)該是力求準(zhǔn)確,該做的一樣都不能少,不必要的就絕對(duì)不要做。其實(shí)無論是原來的結(jié)構(gòu)化編程還是現(xiàn)在的OO編程,一個(gè)函數(shù)或者一個(gè)方法,都應(yīng)該是做且僅作一件事,越靠近底層邏輯的地方越應(yīng)該這樣。尤其是在中國特色的系統(tǒng)中,典型的特點(diǎn)就是數(shù)據(jù)量大+業(yè)務(wù)復(fù)雜。在東北某省移動(dòng)公司的BOSS系統(tǒng),有幾個(gè)主要的服務(wù)每天的調(diào)用量在3000萬(每個(gè)服務(wù),他們的服務(wù)器上有大概20個(gè)這樣的服務(wù))以上,在月底和月初的時(shí)候能夠達(dá)到5000萬甚至更高,但是服務(wù)的執(zhí)行時(shí)間保持在0.02s-0.05s之間,這個(gè)當(dāng)然和數(shù)據(jù)庫設(shè)計(jì)和優(yōu)化有關(guān),但是我無法想象如果在一件簡單的事情之外做一些不必要的事情會(huì)有怎樣的結(jié)果。在南方的某移動(dòng)公司,用戶量已經(jīng)達(dá)到3000萬,他們的系統(tǒng)指導(dǎo)思想就是:用最簡單的技術(shù)去做最復(fù)雜的事情。

    Hibernate的擁護(hù)者會(huì)說,O/R Mapping的框架降低了程序員的門檻,不用去熟悉SQL。難道HQL就比SQL真的簡單很多么?再說了,SQL是必須的基本功,就好像能夠熟練使用操作系統(tǒng)是每個(gè)程序員的基本功一樣。因?yàn)楝F(xiàn)在成熟的主流數(shù)據(jù)庫都是關(guān)系型的,這是根本。這也是為什么O/R Mapping的框架運(yùn)行起來總是很奇怪一樣,因?yàn)閺母鲜顷P(guān)系型的,要想轉(zhuǎn)化成OO,必然就有一些很別扭的東西。以上面的例子看,如果單純看代碼,都能夠明白是要給Person和Event建立映射,不需要其它的東西,因?yàn)閜ersonId和eventId都已經(jīng)有了。但是Hibernate不理解,他也沒有辦法理解。

    有朋友說,使用Hibernate能夠便于團(tuán)隊(duì)協(xié)作。其實(shí)團(tuán)隊(duì)協(xié)作也好,系統(tǒng)的可擴(kuò)展性、可維護(hù)性也好,和你用不用Hibernate完全不相關(guān)。關(guān)鍵是看你的設(shè)計(jì),能否清晰的層次化、模塊化;管理上能否協(xié)調(diào)利用資源等其它因素。

     

    我比較推崇WebLogic Workshop 8.1里面的Control/Database Control/Customer Control的設(shè)計(jì)思路(八卦一下,WebLogic Workshop的設(shè)計(jì)者之一來自MS,原來設(shè)計(jì)Visual Basic的,所以在Workshop里面有很多VBer熟悉的東西),直接在方法的上面用Annotation的方式編寫SQL語句,支持命名參數(shù)。在編譯之后成為無狀態(tài)的Session Bean。自定義Control(可以認(rèn)為是業(yè)務(wù)邏輯層)負(fù)責(zé)事務(wù)控制,很好用。

    喜聞iBATIS也是這種思路的(自己寫SQL語句),看來要學(xué)學(xué)iBATIS哦。

     

    技術(shù)沒有絕對(duì)的好與壞之分,只有適合與不適合之分。我覺得Hibernate并不是很適合大型、大量數(shù)據(jù)的、復(fù)雜數(shù)據(jù)關(guān)系的應(yīng)用。如果我是客戶,我需要的是一個(gè)準(zhǔn)確滿足需求,高效、穩(wěn)定、易于擴(kuò)展的系統(tǒng),我不會(huì)關(guān)心你用的是什么技術(shù)(收費(fèi)的東東另當(dāng)別論,呵呵)。

    以上是一個(gè)Hibernate初學(xué)者的看法,歡迎大家不吝賜教。

     

    在google這個(gè)話題的時(shí)候,看到了另外的一篇帖子,和我的想法有點(diǎn)接近,原文在:http://www.jdon.com/jivejdon/thread/31879.html

    作者drinkjava,內(nèi)容抄錄如下:

    注: Hibernate的復(fù)雜性是人盡皆知,想問一下Hibernate的退化用法,在JAVA***上發(fā)過這個(gè)貼子討教,http://www.java***.com/topic/82107
    ,可惜那個(gè)壇子高手太多,問題還沒看清就開始揮大棒了,只好放這里了,順便把它的一些回貼也貼在這里,望同好們指點(diǎn)一二:
    我用Hibernate也有半年了,感覺Hibernate的映射關(guān)系太復(fù)雜了,與懶性加載,反轉(zhuǎn)控制等結(jié)合在一起,要想控制好,實(shí)非常人之所能。個(gè)人感覺,如果不用Hibernate的關(guān)聯(lián),就把它當(dāng)作關(guān)系數(shù)據(jù)庫來操作,使用和理解上都會(huì)方便不少,例如一個(gè)訂單和產(chǎn)品的配置文件寫成這樣:
    <hibernate-mapping>
      <class name="db.Order" table="orders" catalog="sample">
        <id name="id" type="java.lang.String">
          <column name="ID" length="32" />
          <generator class="uuid.hex" />
        </id>
        <property name="orderTitle" type="java.lang.String">
          <column name="ORDER_TITLE" length="30" />
        </property>
      </class>
    </hibernate-mapping>

    <hibernate-mapping>
      <class name="db.Product" table="products" catalog="sample">
        <id name="id" type="java.lang.String">
          <column name="ID" length="32" />
          <generator class="uuid.hex" />
        </id>
        <property name="productTitle" type="java.lang.String">
          <column name="PRODUCT_TITLE" length="30" />
        </property>
        <property name="orderId" type="java.lang.String">
          <column name="ORDER_ID" length="32" />
        </property>
      </class>
    </hibernate-mapping>

    操作時(shí):
    Order o=new Order();
    o.setOrderTitle("order1");
    dao.saveOne(o);
    Product p=new Product();
    p.setProductTitle("product1");
    p.setOrderId(o.getId());
    dao.saveOne(p);
    (HQL查詢則仿照普通SQL中的寫法,此處略)


    這樣一來,純粹是用關(guān)系數(shù)據(jù)庫的思想來使用Hibernate,一個(gè)類對(duì)應(yīng)一個(gè)數(shù)據(jù)庫表,表之間的約束交給數(shù)據(jù)庫的鍵來控制, 這樣一來,即得到了Hibernate的優(yōu)點(diǎn):不用手工寫SQL,對(duì)象級(jí)別緩存,數(shù)據(jù)庫可移植性,也不必費(fèi)力地學(xué)習(xí)和理解它了,純粹是一個(gè)薄薄的JDBC的包裝; 缺點(diǎn)就是不能在HQL中寫出"...object1.object2.object3..." 式的對(duì)象引用,而且關(guān)聯(lián)表的加載要自已來維護(hù),但我認(rèn)為相對(duì)于理解它復(fù)雜的配置來說,這點(diǎn)犧牲還是值得的, Hibernate的高級(jí)特性當(dāng)然沒法用上了,但相比于直接用JDBC或用ibatis寫SQL總要好得多,只要會(huì)關(guān)系數(shù)據(jù)庫,就能立即上手,在新手多、工期短的項(xiàng)目中,可節(jié)省很多培訓(xùn)時(shí)間,而且對(duì)于后來維護(hù)者的要求也大大降低,請(qǐng)問我的這種想法是否可行?

    以下為JAVA***上的回答
    引用
    java語言不是動(dòng)態(tài)語言,簡化不了這些操作。activeRecord給有我們非份之想,好像馬丁大叔就在嘗試做類時(shí)的orm框架。還有jruby給了我們可行的機(jī)會(huì)

    drinkjava回答:答非所問,離題太遠(yuǎn)。
    --------------------------------------

    引用
    不映射成類怎么利用OO思想啊,hibernate可以對(duì)一個(gè)對(duì)象進(jìn)行操作,jdbc不行啊,主要是可以利用OO思想

    drinkjava回答:你根本就沒看明白這個(gè)貼子的觀點(diǎn),我的意思是完全不用OO思想,只是將Hibernate當(dāng)作一個(gè)比jdbc順手點(diǎn)的工具而已,我用關(guān)系數(shù)據(jù)庫好多年了,也開發(fā)過上百個(gè)表的應(yīng)用,不用OO不也照樣做挺好?JDBC不行,可也沒人說不準(zhǔn)用JDBC吧?

    --------------------------------------

    引用
    請(qǐng)?jiān)俸煤美斫庖幌翺RMapping的含義。
    另外不能充分發(fā)揮關(guān)聯(lián)關(guān)系的優(yōu)勢,是否是因?yàn)闆]有遵循“對(duì)象模型” -> “關(guān)系模型” -> “Hibernate映射規(guī)則”的開發(fā)順序?
     

    drinkjava回答:同上,不是我沒理解,而是本來就沒打算采用“對(duì)象模型” -> “關(guān)系模型”,而是直接一個(gè)表對(duì)應(yīng)一個(gè)類,走的是"關(guān)系模型"的路子。

    --------------------------------------

    引用
    不用關(guān)系影射,你用Hibernate干什么。

    drinkjava回答:

    咱笨,用不好關(guān)聯(lián)映射,怕出錯(cuò),所以干脆不用它,可關(guān)系模型咱還是很精通的,所有的關(guān)系就交給數(shù)據(jù)庫去約束它好了。至于為什么還要用Hibernate,是相比JDBC和ibatis來說的:不用寫很多SQL,有緩存,跨數(shù)據(jù)庫,支持分頁,Spring支持,總之好處一言難盡啊...

    --------------------------------------

    引用
    性能上去了,面向?qū)ο筇匦詻]有了

    drinkjava回答:

    不知你是為了OO而開發(fā),還是為了開發(fā)而OO

    --------------------------------------

    引用
    我第一次用Hibernate的時(shí)候就是這么用的
    然后涉及到多表連接時(shí)統(tǒng)統(tǒng)搞成視圖

    drinkjava回答:

    不會(huì)這么恐怖吧?Hibernate很能干的,你google一下“hibernate多表查詢”就知道了。

    --------------------------------------

    引用
    我就這樣用了快2年了,
    非常的簡便,門檻非常的低,效率也非常不錯(cuò)
    級(jí)聯(lián)查詢統(tǒng)計(jì)返回object[]

    drinkjava回答:

    可見笨人不只我一個(gè)啊,這個(gè)居然用了2年。Hibernate的這種用法確實(shí)很另類,與它誕生的初衷可說是背道而馳,但事實(shí)上,這種方式程序跑起來絕對(duì)沒問題,問題是這種用法能否被團(tuán)隊(duì)接受,讓我用起來心里有個(gè)底,這才是我發(fā)貼詢問的原因。光一個(gè)人私底下用,當(dāng)然沒人會(huì)來說三道四,問題是能不能引入到團(tuán)隊(duì)開發(fā)中,作為一種替代JDBC的簡易方案,而不是被團(tuán)隊(duì)中的高手當(dāng)作異已一棒子打死,因?yàn)橥ǔR惶岬?b>Hibernate大家就會(huì)聯(lián)想到ORM,這確實(shí)是一個(gè)很容易陷入的思維慣性,事實(shí)上,前面幾個(gè)回貼都是這樣,也不想想貼子要表達(dá)的是什么,就開始反駁了。

    posted on 2008-05-05 16:15 YODA 閱讀(2896) 評(píng)論(23)  編輯  收藏

    FeedBack:
    # re: Hibernate, 想說愛你不容易 2008-05-05 17:12 大牙
    呵呵~說得好~支持一下。我們之前一個(gè)BOSS項(xiàng)目,原來設(shè)計(jì)使用Hibernate,但是因?yàn)樾阅軉栴},到了中后期,除了使用單表維護(hù),其他全部被JDBC替代。然后在另一個(gè)相對(duì)小型的項(xiàng)目中打算采用,開發(fā)了兩個(gè)月,因?yàn)樾阅軉栴},被全盤棄用。重新走直接SQL的老路。
    個(gè)人覺得,Hibernate只能在中小型系統(tǒng)中、或?qū)τ跀?shù)據(jù)處理量要求較少的系統(tǒng)比較適用。  回復(fù)  更多評(píng)論
      
    # re: Hibernate, 想說愛你不容易 2008-05-05 17:40 BeanSoft
    Hibernate的一對(duì)一,一對(duì)多,多對(duì)多一直都是謹(jǐn)慎用為好,尤其是大表時(shí)候的效率很低。的確,iBATIS在做SQL為中心的項(xiàng)目時(shí),更合適和高效一些。你說的那個(gè)地方我能猜到,那個(gè)地方高手很多,我發(fā)了個(gè)Netbeans Struts 2插件的使用視頻發(fā)表,馬上有人來說這插件如何如何不好,好像我是作者(遺憾的是我不是插件的作者),我就得把它做成世界一流,要負(fù)責(zé)一樣。開源的軟件嘛,大家都清楚就行了,有人給做個(gè)插件都不錯(cuò)了,不要搞的自己好像很熱愛開源,主要目的就是希望開源的人就得做一流的插件出來,然后自己免費(fèi)用,然后自己做不了還老指責(zé)別人,甚至指責(zé)寫文章來推廣它的人。國內(nèi)的情況,大家還不都是拿著別人的東西(開源免費(fèi)的和盜版的),自己一分不想花,完了還做東西來賣錢。  回復(fù)  更多評(píng)論
      
    # re: Hibernate, 想說愛你不容易 2008-05-05 18:16 jejwe
    iBATIS還是不錯(cuò)的。
    畢竟myspace這個(gè)全球前幾的網(wǎng)站用的iBATIS.NET.
    我想java版本 的ib性能還是有保障的  回復(fù)  更多評(píng)論
      
    # re: Hibernate, 想說愛你不容易 2008-05-05 20:23 26265
    Hibernate做過兩個(gè)項(xiàng)目,不穩(wěn)定。后來?xiàng)売昧耍肑DBC自己寫了一個(gè)類似的。  回復(fù)  更多評(píng)論
      
    # re: Hibernate, 想說愛你不容易 2008-05-05 20:30 YODA
    多謝各位給我更多的參考信息
    BeanSoft,你知道我說的是哪里?哈哈,那你是不是參與了那里的項(xiàng)目了?  回復(fù)  更多評(píng)論
      
    # re: Hibernate, 想說愛你不容易 2008-05-05 21:48 jacky-q
    Hibernate,一開始省心,然后越來越不省心...  回復(fù)  更多評(píng)論
      
    # re: Hibernate, 想說愛你不容易 2008-05-05 22:55 xiaohuasuper
    你的文章不錯(cuò),但你的blog太黑了,看不下去  回復(fù)  更多評(píng)論
      
    # re: Hibernate, 想說愛你不容易 2008-05-05 23:02 YODA
    呵呵,那我改一個(gè),謝謝你的提醒  回復(fù)  更多評(píng)論
      
    # re: Hibernate, 想說愛你不容易 2008-05-05 23:46 BeanSoft
    呵呵 去注冊(cè)了下 為了下東西 沒參與什么項(xiàng)目 看來以后還是少注冊(cè)點(diǎn)帳號(hào) 要不然徒增麻煩 呵呵  回復(fù)  更多評(píng)論
      
    # re: Hibernate, 想說愛你不容易 2008-05-05 23:51 iday
    把說明文檔看完再說吧。。。。  回復(fù)  更多評(píng)論
      
    # re: Hibernate, 想說愛你不容易 2008-05-05 23:54 sunlin
    同意 我基本是這樣想的  回復(fù)  更多評(píng)論
      
    # re: Hibernate, 想說愛你不容易 2008-05-06 11:20 hammer
    一片口誅啊!我也來添一口,我做日本和歐美外包項(xiàng)目,從來沒聽說過那個(gè)用Hibernate的。以前公司里技術(shù)經(jīng)理也專門做過測試,Hibernate的性能在大型應(yīng)用里確實(shí)比JDBC低好多。一般的做法是把sql放在一個(gè)xml或?qū)iT的class里,大家都來這里取著用。即方便查看,又可以在出了問題直接把sql粘到數(shù)據(jù)庫客戶端上運(yùn)行看效果。對(duì)程序員來說,能直接看到sql是最放心的。  回復(fù)  更多評(píng)論
      
    # re: Hibernate, 想說愛你不容易 2008-05-06 23:40 tianya
    我覺得Hibernate很棒啊,提高效率是需要一些技巧的。一開始我也是像你們所說的那樣使用簡單的hibernate特性,后來在項(xiàng)目中不斷探索,針對(duì)需要提高性能的地方著重進(jìn)行優(yōu)化,都能夠很好的解決性能問題。
    舉個(gè)例子吧,我一個(gè)同事用SQL實(shí)現(xiàn)一個(gè)復(fù)雜的連接幾個(gè)表的查詢,數(shù)據(jù)量大的時(shí)候,需要花費(fèi)數(shù)十分鐘的時(shí)間。我使用Hibernate,再使用各種處理技巧(例如視圖、分頁、多線程、HSQL的優(yōu)化、hbm.xml特殊處理)優(yōu)化,實(shí)現(xiàn)的查詢幾乎能在半分鐘之內(nèi)顯示結(jié)果。
      回復(fù)  更多評(píng)論
      
    # re: Hibernate, 想說愛你不容易 2008-05-07 00:52 YODA
    To: tianya
    首先謝謝你的答復(fù)。不是說Hibernate就是不好,存在就是合理,Hibernate有他適用的地方。對(duì)于Hibernate的理解和掌握我肯定沒有你這么深,我想表達(dá)的意思是,Hibernate可能無法準(zhǔn)確理解程序?qū)τ跀?shù)據(jù)操作的需求,所以做了一些無用功(要解決這個(gè)問題,估計(jì)還真是得參考drinkjava兄的Hibernate“退化”用法),所以我有點(diǎn)不喜歡它。說到優(yōu)化,我也相信你說的實(shí)際情況,但是拋開數(shù)據(jù)庫的優(yōu)化不說,單純的SQL優(yōu)化要比HQL和Hibernate的優(yōu)化可能更加明了和簡單呢。就像上面Hammer說的,對(duì)程序員來說,能直接看到sql是最放心的。我就是為了放心...呵呵  回復(fù)  更多評(píng)論
      
    # re: Hibernate, 想說愛你不容易 2008-05-07 11:05 Cchou
    打算用這個(gè)東東的,現(xiàn)在開始猶豫了。沒有升入運(yùn)用過,不敢保證自己有這個(gè)能力去優(yōu)化。  回復(fù)  更多評(píng)論
      
    # re: Hibernate, 想說愛你不容易 2008-05-07 12:37 anonymous
    就你這種水平,別處來現(xiàn)眼了  回復(fù)  更多評(píng)論
      
    # re: Hibernate, 想說愛你不容易 2008-05-08 09:37 rain2005
    不了解hibernate就不要用,真是浪費(fèi)了!  回復(fù)  更多評(píng)論
      
    # re: Hibernate, 想說愛你不容易 2008-05-12 15:14 lmj
    Hibernate思想不錯(cuò)~~性能方面沒有深入研究  回復(fù)  更多評(píng)論
      
    # re: Hibernate, 想說愛你不容易 2008-05-29 13:12 碎石頭
    @tianya
    "舉個(gè)例子吧,我一個(gè)同事用SQL實(shí)現(xiàn)一個(gè)復(fù)雜的連接幾個(gè)表的查詢,數(shù)據(jù)量大的時(shí)候,需要花費(fèi)數(shù)十分鐘的時(shí)間。我使用Hibernate,再使用各種處理技巧(例如視圖、分頁、多線程、HSQL的優(yōu)化、hbm.xml特殊處理)優(yōu)化,實(shí)現(xiàn)的查詢幾乎能在半分鐘之內(nèi)顯示結(jié)果。 "

    如果你那同時(shí)花上你優(yōu)化所用的一半時(shí)間來優(yōu)化他的SQL,效率應(yīng)該在你的一倍以上吧?  回復(fù)  更多評(píng)論
      
    # re: Hibernate, 想說愛你不容易 2008-06-05 13:56 flybean
    用這個(gè)例子來說Hibernate不好,不太合適。

    所產(chǎn)生的前兩句SQL,是為了獲取Person和Event實(shí)例,并不是做“無用功”。
    如果Person已經(jīng)cache在本地了,則只會(huì)產(chǎn)生insert語句,換句話說,在INSERT之前的應(yīng)該是已經(jīng)存在Person實(shí)例了。

    你所想的是在已知personID和eventID的情況下,將兩者關(guān)聯(lián);而Hibernate所想的是關(guān)聯(lián)已知的Person實(shí)例和Event實(shí)例。

    作為ORM工具,Hibernate配合OO的JAVA,可以減少CRUD的工作量。但它并不能代替SQL語句。  回復(fù)  更多評(píng)論
      
    # re: Hibernate, 想說愛你不容易 2008-06-05 17:50 YODA
    感謝flybean回復(fù)

    你說的很對(duì),后來我也在想,未必是浪費(fèi),尤其是在B/S應(yīng)用中,從使用戶使用習(xí)慣和B/S應(yīng)用的特點(diǎn)來看,可能做完INSERT還真的就是需要SELECT,Hibernate的這種特點(diǎn)就正好幫助我們做了這件事情了。呵呵

    [作為ORM工具,Hibernate配合OO的JAVA,可以減少CRUD的工作量。但它并不能代替SQL語句。] 這個(gè)嚴(yán)重同意,很客觀的總結(jié)。

    再次感謝。  回復(fù)  更多評(píng)論
      
    # re: Hibernate, 想說愛你不容易 2008-07-22 14:33 llmlx
    好久沒有看過Hibernate了。不過我印象中你提到的第二個(gè)sql語句是可以省略的。需要在one的一端設(shè)置inverse=true,many端設(shè)置inverse=false,也就是說將關(guān)系由多的一端維護(hù)。那樣保存的時(shí)候,不是利用p.getEvents().add(e);而是通過e.setPerson(p)。我印象中是這樣的,你可以嘗試一下。到時(shí)候再告訴我一下結(jié)果。
    對(duì)于Hibernate的使用我有一些體會(huì),這個(gè)東西還是很強(qiáng)的,很多方面都考慮到了。但是,因?yàn)閺?qiáng)所以很復(fù)雜,要想用得好必須要對(duì)其有比較深刻的理解,像延遲加載、緩存等。在使用之前一定要吃透官方提供文檔和例子,否則還是用你有把握的sql語句,雖然復(fù)雜一些,但是不會(huì)有那么多麻煩。  回復(fù)  更多評(píng)論
      
    # re: Hibernate, 想說愛你不容易 2008-12-11 23:22 benbear
    至于效率問題,可以用緩存去解決。不能因?yàn)樾示腿シ穸╤ibernate。畢竟它用起來很方便。  回復(fù)  更多評(píng)論
      

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲三级在线视频| 二级毛片免费观看全程| 卡一卡二卡三在线入口免费| 亚洲AV无码成人网站在线观看| 亚洲A丁香五香天堂网| 国产免费一区二区三区不卡| 亚洲日韩中文字幕天堂不卡| 日本v片免费一区二区三区| 国产精品美女久久久免费| 亚洲国产综合精品| 亚洲AV蜜桃永久无码精品| 日日麻批免费40分钟无码| 日韩欧美亚洲中文乱码| 亚洲国产成人一区二区精品区| 57PAO成人国产永久免费视频 | 亚洲avav天堂av在线网爱情| 又粗又大又硬又爽的免费视频| 99热这里只有精品6免费| 国产成人亚洲精品无码AV大片| 亚洲av激情无码专区在线播放| 国产人成免费视频| 最近中文字幕国语免费完整| 香蕉国产在线观看免费| 亚洲人成片在线观看| 亚洲日韩aⅴ在线视频| 免费观看的a级毛片的网站| 日本免费高清视频| 狼色精品人妻在线视频免费| 亚洲国产成AV人天堂无码| 夜夜春亚洲嫩草影院| 最好免费观看韩国+日本| 8x成人永久免费视频| yellow免费网站| 亚洲欧美日韩一区二区三区在线| 亚洲成AV人片在| 亚洲午夜福利精品无码| 日本免费人成黄页网观看视频| 亚洲人成在线免费观看| 免费人成黄页在线观看日本| 丁香六月婷婷精品免费观看| 亚洲国产精品无码久久|