初次邂逅Hibernate之关联映射(一对多,多对一,双向)

http://blog.csdn.net/qq_21231581/article/details/51814374中我们对Hibernate中的配置文件,常用API做了初步的了解与探讨,接下来我们将了解一下Hibernate中的关联映射

1.映射关联概述

           在数据库中一般有一对多,一对一以及多对多的数据关系例如:个人和ID(一对一),班级和学生(一对多)或是广播消息与接受者(多对多),而在持久层也相对应的存在该关系,Hibernate帮助我们能通过pojo对象的getter/setter方法就能查询设置关联的另一方对象

2.多对一基本应用

1.创建pojo对象类,形如(当然也要对应地创建一个“一方对象”):
	public class Student implements Serializable {
        ......
	private Grade grade;

	public Grade getGrade() {
		return grade;
	}

	public void setGrade(Grade grade) {
		this.grade = grade;
	}
        ......
}</span>
          2.自动生成hbm.xml映射文件,形如:

<hibernate-mapping>
    <class name="hibernate.Student" table="STUDENT">
        ......
        <!--name:对应的成员名
            class:成员的类名
            -->
        <many-to-one name="grade" class="hibernate.Grade" fetch="join">
        	<!-- name:外键在数据库中的列名 -->
            <column name="GID" />
        </many-to-one>
    </class>
</hibernate-mapping>

           3.在Java代码中运用

              //从数据库取出grade
              Grade grade = (Grade)session.get(Student.class, 1);
              //创建student对象
              Student student = new Student();
        student.setAge(11);
        student.setSid(99);
        student.setDate(new Date());
        student.setEmail("sdfdsadf");
        student.setName("Pharaoh");
              student.setGrade(grade);
              //保存student到数据库
              session.save(student);
          4.完成了student的对象存储,并且数据中student关联了Grade的外键

3.一对多基本应用

          1.步骤一同上,Bean代码形如:

public class Grade implements Serializable {
       private Set<Student> students = new HashSet<>();
       ......
       public Set<Student> getStudents() {return students;}
       public void setStudents(Set<Student> students) {
              this.students = students;
       }
       ......
}
 

 
          2.生成hbm.xml映射文件,形如: 

<hibernate-mapping>
        ......
        <!-- inverse:双向关联的控制方
        	 lazy:懒加载
        	 cascade:级联方式
        	 -->
        <set name="students" table="STUDENT" inverse="true" lazy="true" cascade="all">
            <key>
                <column name="GID" />
            </key>
            <one-to-many class="hibernate.Student" />
        </set>
    </class>
</hibernate-mapping>
           3.Java代码也很简单,大家可以尝试,我就不贴代码了

注:经过如上步骤,Student和Grade形成双向关联,只要用session.save()保存一方即可,但是“多方”的Bean(student)需要事先用setter方法设置“一方”(Grade)的对象,否则数据库中的外键会变为null值

一对多,多对一是我们项目开发中最常见的数据结构,后期有时间我也会继续更新一对一,多对多的的关联映射的基本知识的学习



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值