hibernate学习 关联映射(多对一,一对多)
2017-03-27 16:57
417 查看
一对多关联映射
映射原理
一对多关联映射和多对一关联映射的映射原理是一致的,都是在多的一端加入一个外键,指向一的一端。关联关系都是由多端维护,只是在写映射时发生了变化。
多对一关联是最常见的单向关联关系,如:多个用户属于同一个组,多个学生处于同一个班级。之所以叫他多对一而不是一对多,是因为他们之间的关系是多的一方来维护的,下面我们就以多个用户属于同一个组来详细说明一下单向多对一。首先看一下他们的关系示例:
从上边的图示中可以看出,多个用户属于一个组,我们用多的一方来维护,所以我们可以根据用户可以知道他在哪个组,而不需要知道一个组里有哪些用户,这就是所谓的单向的。多对一映射原理:在多的一端加入一个外键指向一的一端,它维护的关系多指向一,一对多映射原理,在多的一端加入一个外键指向一的一端,她维护的关系是一指向多,也就是说一对多与多对一的映射原理是一样的,只是站的角度不一样。下面来看一下单向多对一关系配置文件:
Group实体是普通的一方,不需要维护.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.hyxd.entity">
<class name="Group" table="group">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name" type="string"></property>
</class>
</hibernate-mapping>
User实体 多端,这里需要创建一个外键来维护User的关系,
public class User {
private int id;
private String name;
private Group group;
}User.hbm.xml映射文件
注:1.many-to-one 元素的常用属性:
多对一关联映射
映射原理
在多端维护一个外键字段,指向一的一端,通过多端来维护
User.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.hyxd.entity">
<class name="User" table="user">
<id name="id" column="u_id">
<generator class="native"></generator>
</id>
<property name="name" type="string" column="uName"></property>
</class>
</hibernate-mapping>
Group
public class Group {
private int id;
private String name;
private Set<User> user;
}Group.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.hyxd.entity">
<class name="Group" table="group">
<id name="id" column="g_id">
<generator class="native"></generator>
</id>
<property name="name" type="string"></property>
<!--
一对多关联映射配置 (通过组管理到用户)
Group 映射关键点:
1. 指定 映射的集合属性
2. 集合属性对应的集合表
inverse=false set集合映射的默认值; 表示有控制权
-->
<set name="user" table="user" inverse="true" cascade="save-update,delete">
<!-- 3. 集合表的外键字段 -->
<key column="groud_id"></key>
<!-- 4. 集合元素的类型 -->
<one-to-many class="User"/>
</set>
</class>
</hibernate-mapping>
下面是多对一的运行结果:
@Test
public void save2() {
Session session = sf.openSession();
session.beginTransaction();
Group group = new Group();
group.setGroupName("管理员");
User user1= new User();
user1.setName("Jack");
User user2= new User();
user2.setName("Tom");
user1.setGroup(group);
user2.setGroup(group);
// 保存
session.save(group); // 先保存一的方法
session.save(user1);
session.save(user2);// 再保存多的一方,关系回自动维护(映射配置完)
session.getTransaction().commit();
session.close();
}这里主要是要把,Group这个属性的ID,保存到User外键里面
映射原理
一对多关联映射和多对一关联映射的映射原理是一致的,都是在多的一端加入一个外键,指向一的一端。关联关系都是由多端维护,只是在写映射时发生了变化。
多对一关联是最常见的单向关联关系,如:多个用户属于同一个组,多个学生处于同一个班级。之所以叫他多对一而不是一对多,是因为他们之间的关系是多的一方来维护的,下面我们就以多个用户属于同一个组来详细说明一下单向多对一。首先看一下他们的关系示例:
从上边的图示中可以看出,多个用户属于一个组,我们用多的一方来维护,所以我们可以根据用户可以知道他在哪个组,而不需要知道一个组里有哪些用户,这就是所谓的单向的。多对一映射原理:在多的一端加入一个外键指向一的一端,它维护的关系多指向一,一对多映射原理,在多的一端加入一个外键指向一的一端,她维护的关系是一指向多,也就是说一对多与多对一的映射原理是一样的,只是站的角度不一样。下面来看一下单向多对一关系配置文件:
Group实体是普通的一方,不需要维护.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.hyxd.entity">
<class name="Group" table="group">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name" type="string"></property>
</class>
</hibernate-mapping>
User实体 多端,这里需要创建一个外键来维护User的关系,
public class User {
private int id;
private String name;
private Group group;
}User.hbm.xml映射文件
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.hyxd.entity"> <class name="User" table="user"> <id name="id" column="u_id"> <generator class="native"></generator> </id> <property name="name" type="string" column="uName"></property> <!-- 多对一映射配置 映射关键点: 1. 映射的属性 : dept 2. 映射的属性,对应的外键字段: dept_id 3. 类型 --> <many-to-one name="group" column="g_id" class="Group"></many-to-one> </class> </hibernate-mapping>
注:1.many-to-one 元素的常用属性:
多对一关联映射
映射原理
在多端维护一个外键字段,指向一的一端,通过多端来维护
User.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.hyxd.entity">
<class name="User" table="user">
<id name="id" column="u_id">
<generator class="native"></generator>
</id>
<property name="name" type="string" column="uName"></property>
</class>
</hibernate-mapping>
Group
public class Group {
private int id;
private String name;
private Set<User> user;
}Group.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.hyxd.entity">
<class name="Group" table="group">
<id name="id" column="g_id">
<generator class="native"></generator>
</id>
<property name="name" type="string"></property>
<!--
一对多关联映射配置 (通过组管理到用户)
Group 映射关键点:
1. 指定 映射的集合属性
2. 集合属性对应的集合表
inverse=false set集合映射的默认值; 表示有控制权
-->
<set name="user" table="user" inverse="true" cascade="save-update,delete">
<!-- 3. 集合表的外键字段 -->
<key column="groud_id"></key>
<!-- 4. 集合元素的类型 -->
<one-to-many class="User"/>
</set>
</class>
</hibernate-mapping>
下面是多对一的运行结果:
@Test
public void save2() {
Session session = sf.openSession();
session.beginTransaction();
Group group = new Group();
group.setGroupName("管理员");
User user1= new User();
user1.setName("Jack");
User user2= new User();
user2.setName("Tom");
user1.setGroup(group);
user2.setGroup(group);
// 保存
session.save(group); // 先保存一的方法
session.save(user1);
session.save(user2);// 再保存多的一方,关系回自动维护(映射配置完)
session.getTransaction().commit();
session.close();
}这里主要是要把,Group这个属性的ID,保存到User外键里面
相关文章推荐
- Hibernate学习-7-关联映射(一对多,多对一)
- Hibernate学习20 -- 关联映射10 -- 组件映射(component)
- Eclipse快速上手Hibernate--7. 关联映射(一对多) (1)(摘自javaxmj的blog)
- Hibernate的关联映射--一对多、
- hibernate学习心得一:一对一单向关联映射
- Hibernate的关联映射之多对一、一对多、多对多
- (转)Hibernate关联映射——一对多(多对一)
- Hibernate 关联映射 之 一对多单项关联 (三)查询
- 一步步学习Hibernate框架(四):采用jpa实现一对多关联映射(二)
- Java的Hibernate框架中一对多的单向和双向关联映射
- Follow Me:深入浅出学习Hibernate五:Hibernate关联映射多对一
- Hibernate学习15 -- 关联映射5 -- 多对多关联1 -- 多对多关联单向
- Hibernate学习21 -- 关联映射11 -- 复合主键映射(composite-id)
- 【HIbernate框架学习】:Hibernate对象关系映射之单向一对多关联映射
- 【HIbernate框架学习】:Hibernate对象关系映射之双向一对多关联映射
- 【HIbernate框架学习】:Hibernate对象关系映射之双向多对多关联映射
- Eclipse快速上手Hibernate--7. 关联映射(一对多) (2)(摘自javaxmj的blog)
- Hibernate一对多关联映射及cascade级联操作
- Hibernate学习之---Hibernate的关联映射
- hibernate 关联映射 双向多对一(一对多)