Hibernate入门之关系篇:多对一和一对多映射

关联关系映射,是对象映射关系中相对复杂的一种,但也是用处最多的一种,因为数据中的表不可能都是单独存在,彼此之间必定存在千丝万缕的联系,这也是关系型数据库的特征所在。同样关联关系的映射,也是对象关系映射中的难点,重点,仔细揣摩,也还是很容易理解掌握的。

         上篇博客,从最简单的一对一映射开始最开端。在关系映射里面,使用频率最高的就是,一对多和多对一的关系。本文,介绍简单的一对多和多对一关系的实现。

 

         一对多关系的建立:

         (1)建立实体类


 

public class Classes {	
		private int id;	
		private String name;	
		private Set students;
		
		public int getId() {
			return id;
		}
		public void setId(int id) {
			this.id = id;
		}
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public Set getStudents() {
			return students;
		}
		public void setStudents(Set students) {
			this.students = students;
		}	
	}

	public class Student {
		private int id;	
		private String name;	
		private Classes classes;

		public int getId() {
			return id;
		}
		public void setId(int id) {
			this.id = id;
		}
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public Classes getClasses() {
			return classes;
		}
		public void setClasses(Classes classes) {
			this.classes = classes;
		}
	}

 

 

(2)建立配置文件:

<class name="com.zs.hibernate.Classes" table="t_classes">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
		<set name="students" inverse="true">		
			<key column="classesid"/>
			<one-to-many class="com.zs.hibernate.Student"/>
		</set>
	</class>
	
	<class name="com.zs.hibernate.Student" table="t_student">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
		<many-to-one name="classes" column="classesid"/>
	</class>


 

多对一关系:

(1)      建立实体(代码略)

 

(2)      配置文件

<class name="com.zs.hibernate.User" table="t_user">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
		<set name="roles" table="t_user_role">
			<key column="user_id"/>
			<many-to-many class="com.zs.hibernate.Role" column="role_id" />	
		</set>
	</class>
	
	<class name="com.zs.hibernate.Role" table="t_role">
		<id name="id">
			<generator class="native"/>
		</id>
		<property name="name"/>
	</class>

 

(3)      生成表关系

 

其中多对一关系,同一对一映射的外键关联基本上差不多,只是一对一映射,又加入唯一性的约束。

         之所以两种关系写在一起,由于两种关系生成的表关系相同,在物理模型方面,维护方式相同。但是从对象方面考虑,一对多关系,是利用set储存多个一的对象,维护的重点在与多的一端,而多对一维护的重点在一的一端



posted @ 2013-09-26 21:44  pangbangb  阅读(173)  评论(0编辑  收藏  举报