• 菜鸟学习Hibernate——一对多关系映射


         Hibernate中的关系映射,最常见的关系映射之一就是一对多关系映射例如学生与班级的关系,一个班级对应多个学生。如图:

          Hibernate中如何来映射这两个的关系呢?

          下面就为大家讲解一下:

    1、创建实体类Classes和实体类Student

    Classes.java

    package com.bjpowernode.hibernate;
    
    import java.util.Set;
    
    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;
    	}
    	
    }
    


    Student.java

    package com.bjpowernode.hibernate;
    
    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、创建映射文件Classes.hbm.xml和Student.hbm.xml

    Classes.hbm.xml

    <?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="com.bjpowernode.hibernate.Classes" table="t_classes">
    		<id name="id">
    			<generator class="native"/>
    		</id>
    		<property name="name"/>
    		<set name="students" inverse="true">
    			<!-- 
    			<key column="classesid" not-null="true"/>
    			 -->
    			 <key column="classesid"/>
    			<one-to-many class="com.bjpowernode.hibernate.Student"/>
    		</set>
    	</class>
    </hibernate-mapping>


    Student.hbm.xml

    <?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="com.bjpowernode.hibernate.Student" table="t_student">
    		<id name="id">
    			<generator class="native"/>
    		</id>
    		<property name="name"/>
    		<many-to-one name="classes" column="classesid"/>
    	</class>
    </hibernate-mapping>


    3、效果图


    PS:我上面举例的是一对多双向关联的例子。有双向关联当然就有单向关联。下面举个例子来说明他们的区别

    如果Student添加了一条记录当中的classesid在Classes中没有这个id,双向关联的话则先添加学生这条记录然后再班级那里添加这个班级,然后再更新学生的classesid。单向关联的话先添加班级,然后再添加学生。

    Meet so Meet. C plusplus I-PLUS....
  • 相关阅读:
    MyBatis(第三方缓存整合原理&ehcache适配包下载)
    MyBatis(缓存机制)
    MyBatis(动态SQL2)
    MyBatis(动态SQL)
    MyBatis(映射文件中使用foreach标签时报错,属性collection的问题)
    MyBatis映射文件(编写SQL语句;可有可无(无的时候,使用注解编程))
    Python virtualenv with Sublime Text 3
    python & mongo问题记录
    CentOS On VirtualBox
    MySQL GROUP BY用法
  • 原文地址:https://www.cnblogs.com/iplus/p/4490387.html
Copyright © 2020-2023  润新知