寫程序,做產品,過日子

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

          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
          主站蜘蛛池模板: 昌都县| 深泽县| 广元市| 安远县| 都匀市| 洞口县| 金湖县| 榆中县| 芦溪县| 陆河县| 无锡市| 盱眙县| 莱芜市| 务川| 乌拉特后旗| 星座| 饶平县| 定结县| 织金县| 灵宝市| 原阳县| 隆安县| 洪湖市| 洞头县| 吉木萨尔县| 赞皇县| 卓尼县| 衡阳县| 浮山县| 晋宁县| 二连浩特市| 改则县| 象山县| 醴陵市| 通渭县| 甘孜| 二连浩特市| 正阳县| 榆中县| 温泉县| 怀远县|