几种hibernate关联映射实例解析

Hibernate关联映射:
(1)一对一 单向
例如
Person类中有属性
private int id;
private String name;
private IdCard card;
而IdCard是类并且类中---没有Private Peeson person属性如:
private int id;
private String name;
一个人一张身份证
查询时只能用Person查询到IdCard
而IdCard查不到Person
这就是一对一 单向关联映射
配置类的映射文件如下:
I......在Person类中的配置:
在普通配置基础上增加了:
<many-to-one name="card" unique="true"/>
==============
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
package="cn.java">
<class name="Person">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<many-to-one name="card" unique="true"/>
</class>
</hibernate-mapping>
II.....在IdCard中的配置---只是普通的配置:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
package="cn.java">
<class name="IdCard">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
(2)一对一 双向
Person类中有属性
private int id;
private String name;
private Dog dog;
而Dog是类并且类中---有--Private Peeson person属性如:
private int id;
private String name;
Private Person person;
两个类能互相查询到信息;
这就是一对一 双向关联映射
配置类的映射文件如下:
I......在Person类中的配置
在普通配置基础上增加了:
<many-to-one name="dog" fetch="join" unique="true" />
===================
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
package="cn.java">

<class name="Person" >
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<many-to-one name="dog" fetch="join" unique="true" />

</class>

</hibernate-mapping>

II.....在Dog中的配置
在普通配置基础上增加了:
<one-to-one name="person" property-ref="dog"/>:

=================
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
package="cn.java">

<class name="Dog" >
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<one-to-one name="person" property-ref="dog"/>
</class>

</hibernate-mapping>
注意property-ref 等于的值为中many-to-one中name对应的值;
<many-to-one name="dog" fetch="join" unique="true" />
一对一第二种方式:
Person类中有属性
private int id;
private String name;
而Dog是类并且类中属性:
private int id;
private String name;
而PersonDog类中属性:
perivate int id;
private Person person;
private Dog dog;

I......在Person类中的配置
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
package="cn.java">

<class name="Person" >
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
II.....在Dog中的配置
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
package="cn.java">

<class name="Dog" >
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
在PersonDog类中的:
<hibernate-mapping>
<class table="T_PersonDog" name="cn.javaPersonDog">
<id name="id">
<generator class="native"/>
</id>
<many-to-one name="dog"/>
<many-to-one name="user"/>
</class>
</hibernate-mapping>

(3)多对一 单向
Person类中有属性
private int id;
private String name;
private Hotel hotel;
而Hotel是类并且类中---没有Private Peeson person属性如:
private int id;
private String name;
一家旅馆住多个人
这就是 多对一 关联映射
配置类的映射文件如下:
I......在Person类中的配置:
在普通配置基础上增加了:
<many-to-one name="hotel" class="cn.java.Hotel"/>

============
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="cn.java.Person" >
<id name="id">
<generator class="native"/>
</id>
<property name="name" type="java.lang.String" column="t_name" length="25"/>
<many-to-one name="hotel" class="cn.java.Hotel"/>
</class>

</hibernate-mapping>
II.....在 Hotel中的配置---只是普通的配置:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="cn.java.Hotel">
<id name="id">
<generator class="native"/>
</id>
<property name="name" type="java.lang.String"/>
</class>
</hibernate-mapping>
(4)一对多 单向
User类中有属性
private int id;
private String name;
Hotel类中有属性
private int id;
private String name;
private Set<User> users;
多个人住一家旅馆
这就是 一对多 关联映射
配置类的映射文件如下:
I......在User类中的配置:普通的配置
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
package="cn.java">
<class name="User">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
II.....在 Hotel中的配置:
增加了

<set name="users">
<key column="hotelId"/>
<one-to-many class="cn.java.User"/>
</set>
==========
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
package="cn.java">
<class name="Hotel">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<set name="users">
<key column="hotelId"/>
<one-to-many class="cn.java.User"/>
</set>
</class>
</hibernate-mapping>
(5)多对一 双向
User类中有属性
public class User {
private int id;
private Hotel hotel;
Hotel类中有属性
private int id;
private String name;
private Set<User> users;
配置类的映射文件如下:
I......在User类中的配置:在普通配置中增加了
<many-to-one name="hotel" class="cn.java.Hotel" column="hotelId" cascade="save-update"/>
===========


<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
package="cn.java">
<class name="User">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<many-to-one name="hotel" class="cn.java.Hotel" cascade="all" column="hotelId"/>
</class>
</hibernate-mapping>
II.....在 Hotel中的配置:
在普通配置基础上增加了:
<set name="users" inverse="true" cascade="save-update">
<key column="hotelId"/>
<one-to-many class="cn.java.User"/>
</set>
=================
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
package="cn.java">
<class name="Hotel">
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
<set name="users" inverse="true">
<key column="hotelId"/>
<one-to-many class="cn.java.User"/>
</set>
</class>
</hibernate-mapping>

(6)多对多 一个人担任多个角色 而同一个角色有多个人担任;
User类中有属性
private int id;
private String name;
private Set<Role> role;

Role类中有属性
private int id;
private String name;
private Set<User> user;
配置类的映射文件如下:
I......在User类中的配置:在普通配置中增加了
<set name="role" table="t_users_roles">
<key column="user_id" />
<many-to-many class="cn.java.Role" column="role_id" />
</set>
============
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="cn.java.User">
<id name="id">
<generator class="native"/>
</id>
<property name="name" type="java.lang.String"/>
<set name="role" table="t_users_roles">
<key column="user_id" />
<many-to-many class="cn.java.Role" column="role_id" />
</set>
</class>
</hibernate-mapping>
II.....在 Role中的配置:
在普通配置基础上增加了:
<set name="user" table="t_users_roles">
<key column="role_id" />
<many-to-many class="cn.java.User" column="user_id" />
</set>
==============
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping >
<class name="cn.java.Role">
<id name="id">
<generator class="native"/>
</id>
<property name="name" type="java.lang.String"/>
<set name="user" table="t_users_roles">
<key column="role_id" />
<many-to-many class="cn.java.User" column="user_id" />
</set>
</class>
</hibernate-mapping>

============================================
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值