Hibernate幾種常見映射

映射導(dǎo)圖

1 一對一映射


1.1 單向映射
  • 主鍵映射

實(shí)體類:User/IdCard

class User{
  private Integer userId;
  private String name;
  private IdCard idCard;
....setter/getter..
}
class IdCard{
  private Integer cardId;
  private String number;
....setter/getter..
}

hibernate配置

  • idCard.hbm.xml:
<hibernate-mapping package="com.entity">
    <class name="IdCard"  >
        <id name="cardId" type="integer">
            <generator class="native" />
        </id>
        <property name="name">
    </class>
</hibernate-mapping>
  • user.hbm.xml:
<hibernate-mapping package="com.entity">
    <class name="User"  >
        <id name="userId" type="integer">
<!-- 采用foreign策略,foreign會自動關(guān)聯(lián)對象的主鍵 --!>
            <generator class="foreign" >
<!-- property之關(guān)聯(lián)對象 --!>
                <param name="property" >idCard</param>
            </generator>
        </id>
        <property name="name">
<!--
    one-to-one指示hibernate如何加載其關(guān)聯(lián)對象,根據(jù)對端的主鍵來加載關(guān)聯(lián)對象

    constrained=“true”表示當(dāng)前主鍵(user的主鍵)也是一個外鍵,參考了對端的主鍵(idCard的
主鍵),即生成相應(yīng)的外鍵約束語句。
--!>
        <one-to-one name="idCard" constrained="true" />  
    </class>
</hibernate-mapping>

  • 外鍵映射

實(shí)體類:User/IdCard

和主鍵映射實(shí)體類相同

hibernate配置

  • idCard.hbm.xml:和主鍵映射相同

  • user.hbm.xml:

<hibernate-mapping package="com.user">
    <class name="User"  >
        <id name="userId" type="integer">
            <column name="user_id" /> 
            <generator class="native" >
            </generator>
        </id>
        <property name="name">

<many-to-one name='idCard' unique=’true‘ />

    </class>
</hibernate-mapping>
1.2 雙向映射
  • 主鍵映射

實(shí)體類:User/IdCard

class User{
  private Integer userId;
  private String name;
  private IdCard idCard;
....setter/getter..
}
class IdCard{
  private Integer cardId;
  private String number;
  private User user;
....setter/getter..
}

hibernate配置

  • idCard.hbm.xml:
<hibernate-mapping package="com.entity">
    <class name="IdCard"  >
        <id name="cardId" type="integer">
            <generator class="native" />
        </id>
        <property name="name">

        <one-to-one name="user" />  
    </class>
</hibernate-mapping>
  • user.hbm.xml:
<hibernate-mapping package="com.user">
    <class name="User"  >
        <id name="userId" type="integer">
            <column name="user_id" /> 
<!-- 采用foreign策略,foreign會自動關(guān)聯(lián)對象的主鍵 --!>
            <generator class="foreign" >
<!-- property之關(guān)聯(lián)對象 --!>
                <param name="property" >idCard</param>
            </generator>
        </id>
        <property name="name">
<!--
    one-to-one指示hibernate如何加載其關(guān)聯(lián)對象,根據(jù)對端的主鍵來加載關(guān)聯(lián)對象

    constrained=“true”表示當(dāng)前主鍵(user的主鍵)也是一個外鍵,參考了對端的主鍵(idCard的
主鍵),即生成相應(yīng)的外鍵約束語句。
--!>
        <one-to-one name="idCard" constrained="true" />  
    </class>
</hibernate-mapping>
  • 外鍵映射

實(shí)體類:User/IdCard

和主鍵映射實(shí)體類相同

hibernate配置

  • idCard.hbm.xml:
<hibernate-mapping package="com.entity">
    <class name="IdCard"  >
        <id name="cardId" type="integer">
            <generator class="native" />
        </id>
        <property name="name">
<!-- property-ref屬性為關(guān)系字段的名稱(user中的idCard屬性) --!>
        <one-to-one name="user" property-ref="idCard" />  
    </class>
</hibernate-mapping>
  • user.hbm.xml:
<hibernate-mapping package="com.user">
    <class name="User"  >
        <id name="userId" type="integer">
            <column name="user_id" /> 
            <generator class="native" >
            </generator>
        </id>
        <property name="name">

<many-to-one name='idCard' unique=’true‘ />
    </class>
</hibernate-mapping>

2 一對多映射


實(shí)體類:User/Classes

class User{
  private Integer userId;
  private String name;
....setter/getter..
}
class Classes{
  private Integer classId;
  private String name;
  private Set<User> users;
....setter/getter..
}

hibernate配置

  • classes.hbm.xml:
<hibernate-mapping package="com.entity">
    <class name="Classes"  >
        <id name="classesId" type="integer">
            <generator class="native" />
        </id>
        <property name="name">
        <set name="users">
           <key column="classesId"/>
           <one-to-many class="User">
      </set>
    </class>
</hibernate-mapping>

3 多對一映射


實(shí)體類:User/Classes

class User{
  private Integer userId;
  private String name;
  private Classes classes;
....setter/getter..
}
class Classes{
  private Integer classId;
  private String name;
....setter/getter..
}

hibernate配置

  • user.hbm.xml:
<hibernate-mapping package="com.entity">
    <class name="User"  >
        <id name="userId" type="integer">
            <generator class="native" />
        </id>
        <property name="name">
       <many-to-one name="classes" />
    </class>
</hibernate-mapping>

4 雙向一對多映射


實(shí)體類:User/Classes

class User{
  private Integer userId;
  private String name;
  private Classes classes;
....setter/getter..
}
class Classes{
  private Integer classId;
  private String name;
  private Set<User> users.
....setter/getter..
}

hibernate配置

  • user.hbm.xml:
<hibernate-mapping package="com.entity">
    <class name="User"  >
        <id name="userId" type="integer">
            <generator class="native" />
        </id>
        <property name="name">
       <many-to-one name="classes" column="classesId"/>
    </class>
</hibernate-mapping>
  • classes.hbm.xml:
<hibernate-mapping package="com.entity">
    <class name="Classes"  >
        <id name="classesId" type="integer">
            <generator class="native" />
        </id>
        <property name="name">
        <set name="users">
           <key column="classesId"/>
           <one-to-many class="User">
      </set>
    </class>
</hibernate-mapping>

5 多對多映射


5.1 單向映射

實(shí)體類:User/Classes

class User{
  private Integer userId;
  private String name;
  private Set<Role> roles;
....setter/getter..
}
class Role{
  private Integer classId;
  private String name;
  private Set<User> users.
....setter/getter..
}

hibernate配置

  • user.hbm.xml:
<hibernate-mapping package="com.entity">
    <class name="User"  >
        <id name="userId" type="integer">
            <generator class="native" />
        </id>
        <property name="name">
<!-- 多對多映射產(chǎn)生一張中間表 --!>
      <set name="roles" table="t_user_role">
<!-- 對應(yīng)的user表的外鍵--!>
        <key name="user_id" />
<!-- 對應(yīng)的role表的外鍵--!>
        <many-to-many class="Role" column="role_id"/>
      </set>
    </class>
</hibernate-mapping>
5.2 雙向映射

實(shí)體類:User/Classes

class User{
  private Integer userId;
  private String name;
  private Set<Role> roles;
....setter/getter..
}
class Role{
  private Integer classId;
  private String name;
  private Set<User> users.
....setter/getter..
}

hibernate配置

  • user.hbm.xml:
<hibernate-mapping package="com.entity">
    <class name="User"  >
        <id name="userId" type="integer">
            <generator class="native" />
        </id>
        <property name="name">
      <set name="roles" table="t_user_role">
        <key name="user_id" />
        <many-to-many class="Role" column="role_id"/>
      </set>
    </class>
</hibernate-mapping>
  • role.hbm.xml:
<hibernate-mapping package="com.entity">
    <class name="Role"  >
        <id name="roleId" type="integer">
            <generator class="native" />
        </id>
        <property name="name">
      <set name="users" table="t_user_role">
        <key name="role_id" />
        <many-to-many class="User" column="user_id"/>
      </set>
    </class>
</hibernate-mapping>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • hibernate表關(guān)聯(lián)的各種配置: 1、多對多單向: user----->role user.hbm.xml: ...
    加油小杜閱讀 336評論 0 0
  • 再開始本次知識點(diǎn)之前,我們先來思考下get與load的區(qū)別。 對于Hibernate get方法,Hibernat...
    FTOLsXD閱讀 408評論 0 1
  • 作為一種輕量級的關(guān)系映射工具,Hibernate支持各種關(guān)系映射,例如:多對一、一對多和一對一的數(shù)據(jù)庫表關(guān)系,通過...
    Ystrator閱讀 579評論 0 1
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 4,017評論 0 11
  • 我來了。
    雨宮螢閱讀 129評論 0 0

友情鏈接更多精彩內(nèi)容