一、多对一

学生Student和班级Grade实现多对一,多个学生对应一个班级。

Student.java实体类,映射了班级的属性。

package com.lxit.entity;

import java.io.Serializable;

public class Student implements Serializable {

    

    public Student() {

    }

    public Student(String sname, String sex, String address) {

        this.sname = sname;

        this.sex = sex;

        this.address = address;

    }

    public Student(String sname, String sex, String address, Grade grade) {

        this.sname = sname;

        this.sex = sex;

        this.address = address;

        this.grade = grade;

    }

    private int sid;

    private String sname;

    private String sex;

    private String address;

    

    //单向多对一:在多的一方封装一的一方的实体对象

    private Grade grade;

    

    public int getSid() {

        return sid;

    }

    public void setSid(int sid) {

        this.sid = sid;

    }

    public String getSname() {

        return sname;

    }

    public void setSname(String sname) {

        this.sname = sname;

    }

    public String getSex() {

        return sex;

    }

    public void setSex(String sex) {

        this.sex = sex;

    }

    public String getAddress() {

        return address;

    }

    public void setAddress(String address) {

        this.address = address;

    }

    public Grade getGrade() {

        return grade;

    }

    public void setGrade(Grade grade) {

        this.grade = grade;

    }

    @Override

    public String toString() {

        return "Student [sid=" + sid + ", sname=" + sname + ", sex=" + sex

                + ", address=" + address + "]";

    }

}

Student.hbm.xml 学生映射文件,添加了和班级的多对一关系

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping>
    <!-- 实体映射文件:将实体对象映射为数据库中的字段 -->
     <class name="com.lxit.entity.Student" table="Student">
         <id name="sid" column="sid">
             <generator class="native"></generator>
         </id>
         <property name="sname" column="sname" type="java.lang.String"></property>
         <property name="sex" column="sex"></property>
         <property name="address" column="address"></property>
         <!-- 实现多对一的映射关系 -->
         <many-to-one name="grade" class="com.lxit.entity.Grade" column="gid" lazy="false"></many-to-one>
     </class>

</hibernate-mapping>

二、一对多

Grade.java实体类,映射了班级和学生的一对多,包含了学生的集合。

package com.lxit.entity;

import java.io.Serializable;

import java.util.HashSet;

import java.util.Set;

public class Grade implements Serializable{

    

    public Grade() {

    }

    

    public Grade(String gname) {

        this.gname = gname;

    }

    

    //在一方添加多方的集合

    public Set<Student> students = new HashSet<Student>();

    private int gid;

    private String gname;

    

    public int getGid() {

        return gid;

    }

    public void setGid(int gid) {

        this.gid = gid;

    }

    public String getGname() {

        return gname;

    }

    public void setGname(String gname) {

        this.gname = gname;

    }

    public Set<Student> getStudents() {

        return students;

    }

    public void setStudents(Set<Student> students) {

        this.students = students;

    } 

Grade映射文件

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

    <!-- 实体映射文件:将实体对象映射为数据库中的字段 -->

     <class name="com.lxit.entity.Grade" table="Grade">

         <id name="gid" column="gid">

             <generator class="native"></generator>

         </id>

         <property name="gname" type="java.lang.String">

             <column name="gname" length="20"></column>

         </property>

         <!-- 

             inverse:表示将维护外键的职责交友多方来维护,默认为false

             cascade:表示级联效果,当保存班级时,班级对应的学生一起保存

         -->

         <set name="students" table="Student" cascade="all">

             <key column="gid"></key>

             <one-to-many class="com.lxit.entity.Student"/>

         </set>

     </class>
</hibernate-mapping> 

Hibernate关系映射(三) 多对一和一对多的更多相关文章

  1. MyBatis加强(1)~myBatis对象关系映射(多对一关系、一对多关系)、延迟/懒加载

    一.myBatis对象关系映射(多对一关系.一对多关系) 1.多对一关系: ---例子:多个员工同属于一个部门. (1)myBatis发送 额外SQL: ■ 案例:员工表通过 dept_id 关联 部 ...

  2. Hibernate学习笔记-Hibernate关系映射

    1. 初识Hibernate——关系映射 http://blog.csdn.net/laner0515/article/details/12905711 2. Hibernate 笔记8 关系映射1( ...

  3. Hibernate关联映射(多对一 --- many-to-one)

    转自:https://blog.csdn.net/fengxuezhiye/article/details/7369786?utm_source=blogxgwz9 Hibernate的关联映射关系有 ...

  4. Hibernate关系映射(三) 多对多

    一.使用用户User和Role实现多对多的示例 User.java,实现对Role的引用 package com.lxit.entity; import java.util.HashSet; impo ...

  5. java:Hibernate框架2(关联映射(多对一,一对多,一对多双向,一对一主键,一对一唯一外键,多对多双向))

      hibernate.cfg.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE h ...

  6. Hibernate实体映射文件多对多等关系简单应用技巧

    认真开完以后,就能很简单的写出各种关系了 第一步,写注释: <!--xx属性,本类与Yy(类)的多对一 --> <!--xx属性,本类与Yy(类)的一对多 --> <!- ...

  7. Hibernate,关系映射的多对一单向关联、多对一双向关联、一对一主键关联、一对一外键关联、多对多关系关联

    2018-11-10  22:27:02开始写 下图内容ORM.Hibernate介绍.hibername.cfg.xml结构: 下图内容hibernate映射文件结构介绍 下图内容hibernate ...

  8. 【SSH 基础】浅谈Hibernate关系映射(4)

    继上篇博客 多对多关联映射(单向) 多对多对象关系映射,须要增加一张新表完毕基本映射. Hibernate会自己主动生成中间表 Hibernate使用many-to-many标签来表示多对多的关联,多 ...

  9. web进修之—Hibernate 关系映射(3)

    概述 Hibernate的关系映射是Hibernate使用的难点或者是重点(别担心,不考试哦~),按照不同的分类方式可以对这些映射关系做一个分类,如: 按对象对应关系分: 一对一 多对一/一对多 多对 ...

  10. Hibernate关系映射(注解)

    1.类级别注解 @Entity     映射实体类 @Table    映射数句库表 @Entity(name="tableName") - 必须,注解将一个类声明为一个实体bea ...

随机推荐

  1. 167. Two Sum II - Input array is sorted【Easy】【双指针-有序数组求两数之和为目标值的下标】

    Given an array of integers that is already sorted in ascending order, find two numbers such that the ...

  2. Java GlassPane进度条遮罩

    package com.swing.demo; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Flo ...

  3. Loj10222 佳佳的Fibonacci(矩阵乘法)

    题面 给定\(n,m\),求: \[ T(n)=\sum_{i=1}^ni\times f_i \] 其中\(f_i\)为斐波那契数列的第\(i\)项 题解 不妨设: \[ S(n)=\sum_{i= ...

  4. 中国石油大学(华东)暑期集训--二进制(BZOJ5294)【线段树】

    问题 C: 二进制 时间限制: 1 Sec  内存限制: 128 MB提交: 8  解决: 2[提交] [状态] [讨论版] [命题人:] 题目描述 pupil发现对于一个十进制数,无论怎么将其的数字 ...

  5. EasyUI学习总结(一)——EasyUI入门(转载)

    本文转载自:http://www.cnblogs.com/xdp-gacl/p/4075079.html 一.EasyUI下载 EasyUI官方下载地址:http://www.jeasyui.com/ ...

  6. 【最小割】BZOJ3438-小M的作物(Rank 2???!!!)(含新款Dinic模板)

    一开始被T掉了之后,才害怕地发现之前写的Dinic基本上都是错的??!!!正确的写在注释里了,注意一下(;3<)馬鹿やろ 一个丧心病狂的优化前后效率对比:

  7. (原创)Stanford Machine Learning (by Andrew NG) --- (week 7) Support Vector Machines

    本栏目内容来源于Andrew NG老师讲解的SVM部分,包括SVM的优化目标.最大判定边界.核函数.SVM使用方法.多分类问题等,Machine learning课程地址为:https://www.c ...

  8. eval命令的使用

    eval :     将参数组合为一个新的命令,然后交给Shell执行.读取一连串的参数,并依参数本身的内容来执行命令.常用来处理Shell脚本中的变量,参数不限数目,参数用分号";&quo ...

  9. Openshift初步学习问题集

    1.设置资源限额 详细参考 https://docs.openshift.com/enterprise/3.2/admin_guide/quota.html#sample-resource-quota ...

  10. 网络工程师岗位基础面试题【适用于CCNA/CCNP基础】

    网络工程师岗位基础面试题[适用于CCNA/CCNP基础] 1: 交换机是如何转发数据包的?交换机通过学习数据帧中的源MAC地址生成交换机的MAC地址表,交换机查看数据帧的目标MAC地址,根据MAC地址 ...