zoukankan      html  css  js  c++  java
  • 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储存多个一的对象,维护的重点在与多的一端,而多对一维护的重点在一的一端



  • 相关阅读:
    Codeforces 22E(图论)
    Codeforces Educational Round 23
    bzoj1444 有趣的游戏(AC自动机+概率dp)
    AtCoder Grand Contest 012 D Colorful Balls
    计蒜客15430 XOR Queries(Trie处理位运算问题)
    AtCoder Grand Contest 012 B Splatter Painting(记忆化搜索)
    Codeforces 799E(贪心)
    Codeforces Round #414
    Codeforces Educational Round 21
    LOJ10078
  • 原文地址:https://www.cnblogs.com/pangblog/p/3341621.html
Copyright © 2011-2022 走看看