寫程序,做產品,過日子

          成功其實很簡單,就是強迫自己堅持下去

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            69 Posts :: 1 Stories :: 92 Comments :: 0 Trackbacks

          Collection mapping table

          HBM Element Java Interface Java Implementation
          <set> Set HashSet
          <set> with order SortedSet TreeSet
          <list> List ArrayList
          <bag>, <idbag> Collection ArrayList
          <map> Map HashMap
          <map> with order SortedMap TreeMap
          <array>, <primitive-array> N/A array

           

          Sample Tables

          CREATE TABLE `core_sample_company` (
            `companyId` decimal(18,0) NOT NULL,
            `companyName` varchar(128) NOT NULL,
            `description` varchar(1024) default NULL,
            PRIMARY KEY  (`companyId`)
          );

          CREATE TABLE `core_sample_role` (
            `roleId` decimal(18,0) NOT NULL,
            `roleName` varchar(128) NOT NULL,
            `companyId` decimal(18,0) NOT NULL,
            `description` varchar(1024) default NULL,
            PRIMARY KEY  (`roleId`)
          );

          CREATE TABLE `core_sample_user` (
            `userId` decimal(18,0) NOT NULL,
            `userName` varchar(128) NOT NULL,
            `companyId` decimal(18,0) NOT NULL,
            `defaultRoleId` decimal(18,0) default NULL,
            `description` varchar(1024) default NULL,
            PRIMARY KEY  (`userId`)
          );

          CREATE TABLE `core_sample_user_role` (
            `userId` decimal(18,0) NOT NULL,
            `roleId` decimal(18,0) NOT NULL,
            `pripority` int(11) NOT NULL,
            PRIMARY KEY  (`userId`,`roleId`)
          );

          HBM defintion

          The definiton of <set>, <bag>, <list> is similar.

          Defines a collection whose element type is simple data type.

          <class name="SampleCompany" table="core_sample_company">

                  <bag name="roleNames" table="core_sample_role" lazy="false" >
                      <key column="companyId"/>
                      <element column="roleName" type="string"/>
                  </bag>

          </class>

          Query HQL: select c.id, c.name, r from SampleCompany c left join c.roleNames r

          Defines a collection whose element type is another mapped java class

          <class name="SampleCompany" table="core_sample_company">   

             <bag name="roles" cascade="none">
                      <key column="companyId"/>
                      <one-to-many class="SampleRole" not-found="ignore"/>
                  </bag>

          </class>

          Query HQL: select c.id, c.name, r.name from SampleCompany c left join c.role r

          Pay attention that key column is a foreign column of SampleRole table.

          Defines a list with list-index

          <list> is not a popular element. It request a index column in table. The index column is the index of java List, it has to be a sequence starts from 0.

          <class name="SampleUser" table="core_sample_user">

               <list name="roles" table="core_sample_user_role" cascade="all" lazy="false" >
                      <key><column name="userId" sql-type="integer"/></key>
                      <index column="priority"></index>
                      <many-to-many class="SampleRole">
                          <column name="roleId"></column>
                      </many-to-many>
                  </list>

          </class>

          The benifit of <list> is it alwasy sorts list by index column. However, It is hard to resort the list. I tried remove a role from role list and add it to another poisition. When save the role list, an exception throwed:

          java.sql.BatchUpdateException: Duplicate entry 'user001-role003 for key 1

          This should be a hibernate bug.

          Defines a bag with relationship table

          <class name="SampleRole" table="core_sample_role">

                <bag name="users" table="core_sample_user_role" cascade="none" lazy="false">
                      <key><column name="roleId" sql-type="integer"/></key>
                      <many-to-many class="SampleUser">
                          <column name="userId"></column>
                      </many-to-many>
                  </bag>

          </class>

          • Key column is foreign column from relationship table to current table(SampleRole>
          • many-to-many sub column is foreign column from relationship table to target table (SampleUser)
          posted on 2007-10-24 11:09 Welkin Hu 閱讀(714) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 上犹县| 景德镇市| 喜德县| 固始县| 广宗县| 乌兰察布市| 淮阳县| 迁西县| 呼玛县| 枣庄市| 酉阳| 龙川县| 石泉县| 繁峙县| 克什克腾旗| 萨嘎县| 武威市| 花莲市| 宣汉县| 泸溪县| 华容县| 盱眙县| 大港区| 宁强县| 莱阳市| 乐东| 尉氏县| 兴安盟| 息烽县| 无为县| 红桥区| 夏津县| 仁怀市| 邢台市| 兰溪市| 绵竹市| 金川县| 江川县| 离岛区| 文安县| 阿荣旗|