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

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

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

    posts - 431,  comments - 344,  trackbacks - 0

    Hibernate.cfg.xml 配置文件:
    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "hibernate-configuration-2.0.dtd">
    <hibernate-configuration>
        <session-factory>
            <!-- properties -->
            <!-- jndi -->
            <property name="connection.datasource">java:comp/env/jdbc/quickstart</property>
            <property name="connection.provider_class">net.sf.hibernate.connection.DatasourceConnectionProvider</property>
            <property name="dialect">net.sf.hibernate.dialect.SQLServerDialect</property>
            <!-- jdbc
            <property name="connection.url">jdbc:microsoft:sqlserver://localhost:1433;SelectMethod=cursor;DatabaseName=pubs</property>
            <property name="connection.driver_class">com.microsoft.jdbc.sqlserver.SQLServerDriver</property>
            <property name="connection.username">sa</property>
            <property name="connection.password"></property>
             -->
            <property name="jdbc.fetch_size">50</property><!--
    一次讀的數(shù)據(jù)庫記錄數(shù) -->
            <property name="jdbc.batch_size">30</property><!--
    設定對數(shù)據(jù)庫進行批量刪除
    -->
            <property name="show_sql">true</property><!--
    Hibernate 發(fā)送給數(shù)據(jù)庫的 sql 顯示出來
    -->
            <!-- Mapping files -->
            <mapping resource="cat.hbm.xml"/>
        </session-factory>
    </hibernate-configuration>

    數(shù)據(jù)庫表主鍵的知識點:
    Generator
    為每個 POJO 的實例提供唯一標識。一般情況,我們使用“ native ”。 class 表示采用由生成器接口 net.sf.hibernate.id.IdentifierGenerator 實現(xiàn)的某個實例,其中包括:

    assigned
    主鍵由外部程序負責生成,在 save() 之前指定一個。

    hilo
    通過 hi/lo 算法實現(xiàn)的主鍵生成機制,需要額外的數(shù)據(jù)庫表或字段提供高位值來源。

    seqhilo
    hilo 類似,通過 hi/lo 算法實現(xiàn)的主鍵生成機制,需要數(shù)據(jù)庫中的 Sequence ,適用于支持 Sequence 的數(shù)據(jù)庫,如 Oracle

    increment
    主鍵按數(shù)值順序遞增。此方式的實現(xiàn)機制為在當前應用實例中維持一個變量,以保存著當前的最大值,之后每次需要生成主鍵的時候將此值加 1 作為主鍵。這種方式可能產(chǎn)生的問題是:不能在集群下使用。

    identity
    采用數(shù)據(jù)庫提供的主鍵生成機制。如 DB2 SQL Server MySQL 中的主鍵生成機制。

    sequence
    采用數(shù)據(jù)庫提供的 sequence 機制生成主鍵。如 Oralce 中的 Sequence

    native
    Hibernate 根據(jù)使用的數(shù)據(jù)庫自行判斷采用 identity hilo sequence 其中一種作為主鍵生成方式。

    uuid.hex
    Hibernate 基于 128 UUID 算法 生成 16 進制數(shù)值(編碼后以長度 32 的字符串表示)作為主鍵。

    uuid.string
    uuid.hex 類似,只是生成的主鍵未進行編碼(長度 16 ),不能應用在 PostgreSQL 數(shù)據(jù)庫中。

    foreign
    使用另外一個相關聯(lián)的對象的標識符作為主鍵。

    以下舉例:
    1
    、指定參數(shù)的情況:
        <id name="id" unsaved-value="0">
          <generator class="sequence">
            <param name="sequence">SEQ_CHILD</param>
          </generator>
    </id>
    使用的是 sequence ,適合 oracle 數(shù)據(jù)庫;

    2 、對于 sql server2000 中的數(shù)據(jù)庫子增字段 , 在配置文件使用下列方法實現(xiàn):
    <id name="id" type="long" unsaved-value="0">
         <column name="id" sql-type="numeric" not-null="true" />
         <generator class="identity" />
    </id>
    這里主要是 :identity: 代表由 sql server2000 數(shù)據(jù)庫自己提供子增字段 . 如果要 hibernate 自己提供 , 則用 increment 關鍵字來實現(xiàn)

    3 、如果表中的主鍵用字符串類型 : 可以用 hibernate 自己提供的方法實現(xiàn)主鍵唯一 :
      <id name="id" type="string" unsaved-value="null">
          <column name="cid" sql-type="char(32)" not-null="true" />
          <generator class="uuid.hex" />
      </id>
    使用的是 uuid.hex: 采用 128 位的算法來生成一個 32 位字符串。最通用的一種方式。適用于所有數(shù)據(jù)庫。

    重要的知識點 :
    1.
    如果有部門表 , 有員工表 , 員工表中有 dep_id, 則表部門類和員工類是 one-to-many 的關系
    :
      
    可以使用 :  ( 在部門類 department 中使用下列
    )
       Department

         /** 
    部門的所有員工
       */
        private Set staffs = new TreeSet();
       
        xml
    的文件
    :
          <set name="staffs" >
              <key column="dep_id"/>
              <one-to-many class="hbp.sys.data.Staff"/>
          </set>
         
    如果是 list, 需要用索引 <index> </index>, 具體其中的含義 , 不是很明白 . 待以后研究

         
     2.
    如果部門要有一個負責人 , 即部門表 (tb_department) 中有一個字段 :staff_id.
        
    那么表示部門和負責人之間的關系是 many-to-one 的關系

         Department
    :
          /**
    部門負責人
    id */
        private Staff staff;
       
        xml
    文件

         <many-to-one name="staff" class="hbp.sys.data.Staff"  column="staff_id"/> 
     
     3.
    多對多關系 , 一般我們是做一個中間關聯(lián)表 . 我用角色和權限做了個例子 ,
          Right(id,name)     Role(id,name)  
    中間表
    :tb_role_right(role_id,right_id)
          Right
    類中有一個 Role 的集合
    :private Set roles=new TreeSet();
          Role
    類中也有一個 Right 的集合
    :private Set rights=new TreeSet();
         
    則兩者是明顯的多對多關系 . 使用 many-to-many 來實現(xiàn)
    ;
          xml
    文件中

          right.hbm.xml:
    如下 :
            <set name="roles" table="tb_role_right" cascade="all">
               <key column="right_id"/>
               <many-to-many column="role_id" class="hbp.sys.data.Role"/>
            </set>
          role.hbm.xml
    文件中類似
    :
            <set name="rights" table="tb_role_right" cascade="all">
              <key column="role_id"/>
              <many-to-many column="right_id" class="hbp.sys.data.Right"/>
            </set>

    4. 幾個值得注意的問題 :
            a)
    xml? 映射文件中 , 寫類的名字時一定用類的全名 : : + 類名如 :(hbp.sys.data.Staff), 這個錯誤使我費了半天勁
    .:(
            b)
    我在寫實現(xiàn)基本 DAO 操作時 , 寫了

                 session.delete("from Right as right where right.id="+id); 
                
    程序死活報錯 , 我折騰了半天 , 跟蹤到底 , 才恍然大悟 ,hibernate 在解析 sql 語句的時候把
                
    其中的 right, 當成了數(shù)據(jù)庫中的右連接 (" 保留字 "), , 這種關鍵字 , 不能隨便用啊 ,:)

    5. hibernate HQL 語言的查詢根據(jù)你的 sql 的不同而返回不同的對象類型 .
            
    如果你使用
    session.find(String hql)
            
    一般會返回一個 List, :from Staff staff; 返回的是包含所有的員工對象的集合

            
    如你的 hql :select count(*) from Staff staff; 則返回的是一個 Integer 對象
            
    如果你使用的 hql :select count(distinct staff.name),count(*) from Staff staff; 則返回的是一個 Object
            
    Object[], 需要先把他轉換成 Object[], 然后在取
    [0],[1].
            
    這種設計我不知道 hibernate 是如何處理的 , 感覺既好也不好 . 好的是可以使用一個 find 獲得任意查詢

            
    不好在于根據(jù) hql 來處理返回結果 , 容易出錯 .

     

    posted on 2006-09-06 16:47 周銳 閱讀(179) 評論(0)  編輯  收藏 所屬分類: Hibernate
    主站蜘蛛池模板: 国产亚洲色婷婷久久99精品| 亚洲黄色在线视频| 免费福利在线视频| 亚洲最大视频网站| 女人18毛片a级毛片免费视频| 疯狂做受xxxx高潮视频免费| 黑人精品videos亚洲人| 91九色精品国产免费| 免费国产黄网站在线看| 亚洲黄色免费网址| 亚洲AV无码一区二三区 | 污污的视频在线免费观看| 亚洲成熟xxxxx电影| 日本一道本高清免费| 久久久久免费看黄a级试看| 亚洲AV无码之国产精品| 在线电影你懂的亚洲| 免费大黄网站在线观| 亚欧色视频在线观看免费| 一级特黄色毛片免费看| 亚洲制服丝袜中文字幕| 久久国产精品亚洲综合| mm1313亚洲精品国产| 99久久久精品免费观看国产| 中文字幕乱理片免费完整的| 亚洲av最新在线观看网址| 亚洲一卡2卡三卡4卡有限公司| www亚洲精品少妇裸乳一区二区| 国产91免费视频| 日本免费一区二区久久人人澡| 老牛精品亚洲成av人片| 亚洲高清一区二区三区| 亚洲国产精品热久久| 亚洲中文字幕在线观看| 伊人久久亚洲综合影院| 女人张腿给男人桶视频免费版| 亚洲午夜免费视频| 国产免费一区二区视频| 一级做a爰性色毛片免费| 深夜A级毛片视频免费| 色婷婷六月亚洲综合香蕉|