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

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

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

    hibernate summarize

     1.兩種配置文件:
      A.hibernate.cfg.xml和B.hibernate.properties
      
      A中可含映射文件的配置,而B中hard codes加映射文件。
      
      A.Configuration config=new Configuration().config();
      B. Configuration config=new Configuration();
      config.addClass(TUser.class);
      
      2.你不必一定用hibernate.cfg.xml或hibernate.properties這兩文件名,你也不一定非得把配置文件放在Classes下,  File file=new File("c:\\sample\\myhibernate.xml");  Configuration config=new Configuration().config(file);
      
      3. session.Flush() 強(qiáng)制數(shù)據(jù)庫立即同步,當(dāng)用事務(wù)時(shí),不必用flush,事務(wù)提交自動(dòng)調(diào)用flush在session關(guān)閉時(shí)也會(huì)調(diào)用flush
      
      4. Hibernate總是使用對(duì)象類型作為字段類型
      
      5. XDoclet專門建立了hibernate doclet,就是在java代碼上加上一些java docTag,后來再讓XDoclet分析該java代碼,生成映射文件;
      
      6.HQL子句本身大小寫無關(guān),但是其中出現(xiàn)的類名和屬性名必須注意大小寫區(qū)分。
      
      7.關(guān)系:  Constrained : 約束,表明主控表的主鍵上是否存在一個(gè)外鍵(foreigh key)對(duì)其進(jìn)行約束。
      
      property-ref:關(guān)聯(lián)類中用于與主控類相關(guān)聯(lián)的屬性名,默認(rèn)為關(guān)聯(lián)類的主鍵屬性名
      
      單向一對(duì)多需在一方配置,雙向一對(duì)多需在雙方進(jìn)行配置
      
      8.lazy=false:被動(dòng)方的記錄由hibernate負(fù)責(zé)記取,之后存放在主控方指定的Collection類型屬性中
      
      9. java.util.Set或net.sof.hibernate.collecton.Bag類型的Collection
      
      10.重要:inverse:用于標(biāo)識(shí)雙向關(guān)聯(lián)中的被動(dòng)方一端。
      
      inverse=false的一方(主控方)負(fù)責(zé)維護(hù)關(guān)聯(lián)關(guān)系.默認(rèn)值:false
      
      11.batch-size:采用延遲加載特征時(shí),一次讀入的數(shù)據(jù)數(shù)昨。
      
      12.一對(duì)多通過主控方更新(主控方為一方時(shí))
      
      user.getAddresses().add(addr);
      
      session.save(user);//通過主控對(duì)象級(jí)聯(lián)更新
      
      13.在one-to-many 關(guān)系中,將many 一方設(shè)為主動(dòng)方(inverse=false)將有助性能的改善。在一方設(shè)置關(guān)系時(shí),inverse=true,即將主控權(quán)交給多方,  這樣多方可主動(dòng)從一方獲得foreign key,然后一次insert即可完工。
      
      addr.setUser(user);//設(shè)置關(guān)聯(lián)的TUser對(duì)象
      
      user.getAddresses().add(addr);
      
      session.save(user);//級(jí)聯(lián)更新
      
      14.只有設(shè)為主控方的一方才關(guān)心(訪問)對(duì)方的屬性,被動(dòng)方是不關(guān)心對(duì)方的屬性的。
      
      15.one-to-many與many-to-one節(jié)點(diǎn)的配置屬性不同:
      
      一對(duì)多關(guān)系多了lazy和inverse兩個(gè)屬性多對(duì)多節(jié)點(diǎn)屬性:
      
      column:中間映射表中,關(guān)聯(lián)目標(biāo)表的關(guān)聯(lián)字段
      
      class:類名,關(guān)聯(lián)目標(biāo)類
      
      outer-join:是否使用外聯(lián)接
      
      注意:access是設(shè)置屬性值的讀取方式。
      
      column是設(shè)置關(guān)聯(lián)字段。
      
      16.多對(duì)多,注意兩方都要設(shè)置inverse和lazy,cascade只能設(shè)為insert-update
      
      多對(duì)多關(guān)系中,由于關(guān)聯(lián)關(guān)系是兩張表相互引用,因此在保存關(guān)系狀態(tài)時(shí)必須對(duì)雙方同時(shí)保存。
      
      group1.getRoles().add(role1);  role1.getGroups().add(group1);
      
      session.save(role1);  session.save(group1);
      
      17.關(guān)于vo和po  vo經(jīng)過hibernate容量處理,就變成了po(該vo的引用將被容器保存,并且在session關(guān)閉時(shí)flush,因此po如果再傳到其它地方改變了,就危險(xiǎn)了)    vo和po相互轉(zhuǎn)換:BeanUtils.copyProperties(anotherUser,user);
      
      18.對(duì)于save操作而言,如果對(duì)象已經(jīng)與Session相關(guān)聯(lián)(即已經(jīng)被加入Session的實(shí)體容器中),則無需進(jìn)行具體的操作。因?yàn)橹蟮腟ession.flush過程中,Hibernate 會(huì)對(duì)此實(shí)體容器中的對(duì)象進(jìn)行遍歷,查找出發(fā)生變化的實(shí)體,生成并執(zhí)行相應(yīng)的update 語句。
      
      19.如果我們采用了延遲加載機(jī)制,但希望在一些情況下,實(shí)現(xiàn)非延遲加 載時(shí)的功能,也就是說,我們希望在Session關(guān)閉后,依然允許操作user的addresses 屬性 Hibernate.initialize方法可以通過強(qiáng)制加載關(guān)聯(lián)對(duì)象實(shí)現(xiàn)這一功能: 這也正是我們?yōu)槭裁丛诰帉慞OJO時(shí),必須用JDK Collection接口(如Set,Map), 而非特定的JDK Collection實(shí)現(xiàn)類(如HashSet、HashMap)申明Collection屬性的 原因。
      
      20.事務(wù):從sessionFactory獲得session,其自動(dòng)提交屬性就已經(jīng)關(guān)閉(AutoCommit=false),此時(shí)若執(zhí)行了jdbc操作,如果不顯式調(diào)用session.BeginTransaction(),是不會(huì)執(zhí)行事務(wù)操作的。
      
      jdbc transaction:基于同一個(gè)session(就是同一個(gè)connection)的事務(wù);
      
      jta transaction:跨session(跨connection)事務(wù).
      
      對(duì)于jta事務(wù),有三種實(shí)現(xiàn)方法:
      
      A。UserTransaction tx=new InitialContext().lookup("...");
      tx.commit();
      
      B. 使用hibernate封裝的方法:(不推薦)
      
      Transaction tx=session.beginTransaction();
      tx.commit();
      C. 使用ejb之sessionBean的事務(wù)技持方法,你只要在把需要在發(fā)布描述符中,把需要jta事務(wù)的方法聲明為require即可
      
      21.悲觀鎖,樂觀鎖:  樂觀鎖一般通過version來實(shí)現(xiàn),注意version節(jié)點(diǎn)必須出現(xiàn)在id后。
      
      22.Hibernate中,可以通過Criteria.setFirstResult和Criteria.setFetchSize方法設(shè)定分頁范圍。
      
      Query接口中也提供了與其一致的方法,hibernate主要在dialect類中實(shí)現(xiàn)在這個(gè)功能。
      
      23.cache
      
       ……
      
      net.sf.ehcache.hibernate.Provider 

      
      還需對(duì)ecache本身進(jìn)配置
      
       

      
      之后在映射文件中指定各個(gè)映射實(shí)體的cache策略
      
      
      ....
      
      
      ....
      

      
      ***************************************************** Query.list()跟Query.iterate()的不同: 對(duì)于query.list()總是通過一條sql語句獲取所有記錄,然后將其讀出,填入pojo返回; 但是query.iterate(),則是首先通過一條Select SQL 獲取所有符合查詢條件的記錄的 id,再對(duì)這個(gè)id 集合進(jìn)行循環(huán)操作,通過單獨(dú)的Select SQL 取出每個(gè)id 所對(duì)應(yīng)的記 錄,之后填入POJO中返回。
      
      也就是說,對(duì)于list 操作,需要一條SQL 完成。而對(duì)于iterate 操作,需要n+1 條SQL。,list方法將不會(huì)從Cache中讀取數(shù)據(jù)。iterator卻會(huì)。
      
      24.ThreadLocal:它會(huì)為每個(gè)線程維護(hù)一個(gè)私有的變量空間。實(shí)際上, 其實(shí)現(xiàn)原理是在JVM 中維護(hù)一個(gè)Map,這個(gè)Map的key 就是當(dāng)前的線程對(duì)象,而value則是 線程通過ThreadLocal.set方法保存的對(duì)象實(shí)例。當(dāng)線程調(diào)用ThreadLocal.get方法時(shí), ThreadLocal會(huì)根據(jù)當(dāng)前線程對(duì)象的引用,取出Map中對(duì)應(yīng)的對(duì)象返回。
      
      這樣,ThreadLocal通過以各個(gè)線程對(duì)象的引用作為區(qū)分,從而將不同線程的變量隔離開來。
      
      25.Hibernate官方開發(fā)手冊(cè)標(biāo)準(zhǔn)示例:
      
      public class HibernateUtil { private static SessionFactory sessionFactory;
      static { try { // Create the SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
      } catch (HibernateException ex) { throw new RuntimeException( "Configuration problem: " + ex.getMessage(), ex );
      } } public static final ThreadLocal session = new ThreadLocal();
      public static Session currentSession() throws HibernateException { Session s = (Session) session.get();
      // Open a new Session, if this Thread has none yet if (s == null) { s = sessionFactory.openSession();
      session.set(s);
      } return s;
      } public static void closeSession() throws HibernateException { Session s = (Session) session.get();
      session.set(null);
      if (s != null) s.close();
      } }
      
      26.通過filter實(shí)現(xiàn)session的重用:
      
      public class PersistenceFilter implements Filter { protected static ThreadLocal hibernateHolder = new ThreadLocal();
      public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { hibernateHolder.set(getSession());
      try { …… chain.doFilter(request, response);
      …… } finally { Session sess = (Session)hibernateHolder.get();
      if (sess != null) { hibernateHolder.set(null);
      try { sess.close(); } catch (HibernateException ex) { throw new ServletException(ex);
      } } } } ……}<>

    posted on 2006-10-31 16:14 leoli 閱讀(238) 評(píng)論(0)  編輯  收藏 所屬分類: Frame

    導(dǎo)航

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    統(tǒng)計(jì)

    常用鏈接

    留言簿(6)

    隨筆分類

    隨筆檔案(17)

    文章分類(86)

    收藏夾(3)

    flex blog

    good site

    java blog

    my friend

    tools

    抓蝦

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲国产精品特色大片观看完整版 | 亚洲性线免费观看视频成熟| 亚洲黄色网站视频| 毛色毛片免费观看| 国产免费人成视频在线播放播| 亚洲电影中文字幕| 女人让男人免费桶爽30分钟| 精品久久久久久国产免费了 | 亚洲爆乳少妇无码激情| 亚洲区小说区图片区| 亚洲免费福利视频| 最新亚洲人成网站在线观看| 亚洲AV色香蕉一区二区| 午夜神器成在线人成在线人免费 | 久久久久久久99精品免费| 亚洲国产精品网站在线播放| 亚洲国产精品无码久久一线| 午夜视频免费成人| 7x7x7x免费在线观看| 特级毛片全部免费播放a一级| 99人中文字幕亚洲区| 亚洲国产成人久久一区WWW| 99久久久国产精品免费无卡顿| 一区二区免费电影| 中文字幕亚洲情99在线| 久久久久久亚洲精品中文字幕| 又色又污又黄无遮挡的免费视| 1000部拍拍拍18免费网站| 久久久久久久久久久免费精品| 亚洲欧洲专线一区| 亚洲成综合人影院在院播放| 亚洲欧洲成人精品香蕉网| 国产又黄又爽又刺激的免费网址| 猫咪免费人成网站在线观看| 成人妇女免费播放久久久| 亚洲1区2区3区精华液| 亚洲中文字幕日本无线码| 亚洲美女在线观看播放| 亚洲av无码国产精品色午夜字幕 | 老司机午夜精品视频在线观看免费| 亚洲国产美女视频|