映射導圖
1 一對一映射
1.1 單向映射
- 主鍵映射
實體類: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會自動關聯(lián)對象的主鍵 --!>
<generator class="foreign" >
<!-- property之關聯(lián)對象 --!>
<param name="property" >idCard</param>
</generator>
</id>
<property name="name">
<!--
one-to-one指示hibernate如何加載其關聯(lián)對象,根據(jù)對端的主鍵來加載關聯(lián)對象
constrained=“true”表示當前主鍵(user的主鍵)也是一個外鍵印荔,參考了對端的主鍵(idCard的
主鍵)低葫,即生成相應的外鍵約束語句。
--!>
<one-to-one name="idCard" constrained="true" />
</class>
</hibernate-mapping>
- 外鍵映射
實體類:User/IdCard
和主鍵映射實體類相同
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 雙向映射
- 主鍵映射
實體類: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會自動關聯(lián)對象的主鍵 --!>
<generator class="foreign" >
<!-- property之關聯(lián)對象 --!>
<param name="property" >idCard</param>
</generator>
</id>
<property name="name">
<!--
one-to-one指示hibernate如何加載其關聯(lián)對象嘿悬,根據(jù)對端的主鍵來加載關聯(lián)對象
constrained=“true”表示當前主鍵(user的主鍵)也是一個外鍵,參考了對端的主鍵(idCard的
主鍵)水泉,即生成相應的外鍵約束語句鹊漠。
--!>
<one-to-one name="idCard" constrained="true" />
</class>
</hibernate-mapping>
- 外鍵映射
實體類:User/IdCard
和主鍵映射實體類相同
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屬性為關系字段的名稱(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 一對多映射
實體類: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 多對一映射
實體類: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 雙向一對多映射
實體類: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 單向映射
實體類: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">
<!-- 對應的user表的外鍵--!>
<key name="user_id" />
<!-- 對應的role表的外鍵--!>
<many-to-many class="Role" column="role_id"/>
</set>
</class>
</hibernate-mapping>
5.2 雙向映射
實體類: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>