寫程序,做產品,過日子

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

          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 閱讀(719) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 邯郸市| 文昌市| 普安县| 奇台县| 麻阳| 泰安市| 赞皇县| 长垣县| 云龙县| 繁峙县| 安泽县| 星子县| 夹江县| 蒲江县| 黄梅县| 大英县| 荆州市| 龙州县| 始兴县| 含山县| 抚远县| 七台河市| 东明县| 济宁市| 东乡县| 河北省| 宣汉县| 平顺县| 喜德县| 阿克苏市| 盘山县| 乳源| 长沙县| 南京市| 壤塘县| 象山县| 新津县| 阿克陶县| 海兴县| 本溪市| 九江县|