<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><!--
    一次讀的數據庫記錄數 -->
            <property name="jdbc.batch_size">30</property><!--
    設定對數據庫進行批量刪除
    -->
            <property name="show_sql">true</property><!--
    Hibernate 發(fā)送給數據庫的 sql 顯示出來
    -->
            <!-- Mapping files -->
            <mapping resource="cat.hbm.xml"/>
        </session-factory>
    </hibernate-configuration>

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

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

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

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

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

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

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

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

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

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

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

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

    2 、對于 sql server2000 中的數據庫子增字段 , 在配置文件使用下列方法實現(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 數據庫自己提供子增字段 . 如果要 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 位字符串。最通用的一種方式。適用于所有數據庫。

    重要的知識點 :
    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, 當成了數據庫中的右連接 (" 保留字 "), , 這種關鍵字 , 不能隨便用啊 ,:)

    5. hibernate HQL 語言的查詢根據你的 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 獲得任意查詢

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

     

    posted on 2006-09-06 16:47 周銳 閱讀(179) 評論(0)  編輯  收藏 所屬分類: Hibernate
    主站蜘蛛池模板: jzzjzz免费观看大片免费| 99精品视频免费在线观看| 亚洲精品无码mv在线观看网站 | 久久99毛片免费观看不卡| 亚洲欧洲自拍拍偷午夜色| 四虎免费永久在线播放| 特级无码毛片免费视频尤物| 亚洲国产高清在线一区二区三区| 99久久免费国产精精品| 国产成人精品日本亚洲18图| 国产亚洲成人久久| av无码免费一区二区三区| a高清免费毛片久久| 亚洲一区二区三区免费在线观看 | 亚洲影视自拍揄拍愉拍| 亚洲国产中文v高清在线观看| 精品无码国产污污污免费网站| 亚洲欧洲AV无码专区| 亚洲AV无码成人精品区天堂| 国产精品jizz在线观看免费| 88xx成人永久免费观看| 一区二区3区免费视频| 亚洲日产乱码一二三区别| 亚洲av永久无码精品网站| 亚洲?V无码乱码国产精品| 中文字幕无码播放免费| a级大片免费观看| 人与动性xxxxx免费| 亚洲人成色777777老人头| 亚洲黄色免费观看| 国产V亚洲V天堂无码| 亚洲国产一成久久精品国产成人综合| 国产精品永久免费10000| 亚洲精品免费视频| 久久精品免费网站网| 黄色免费网站在线看| 亚洲熟伦熟女专区hd高清| 亚洲天堂福利视频| 亚洲精品国产成人专区| 亚洲精品国产精品乱码不卡√| 无码欧精品亚洲日韩一区夜夜嗨 |