一、多对一

学生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. 洛谷P2520向量

    题目传送门 看到数据范围其实就可以确定这是一道结论题. 首先分析,给定你的向量的两个坐标a,b有八种组合方式可以用,但实际上整理一下可以得出实际上只有五种,x/y ±2a,x/y ±2b,x+a,y+ ...

  2. window10 Powershell使用curl命令报错解决方法

    报错信息:curl : 无法分析响应内容,因为 Internet Explorer 引擎不可用,或者 Internet Explorer 的首次启动配置不完整.请指定 UseBasicParsing ...

  3. Poj2482 Stars in Your Window(扫描线)

    题面 Poj 题解 下面内容引用自"李煜东 <算法竞赛进阶指南>"(对原文略有缩减,侵删): 因为矩形的大小固定,所以矩形可以由它的任意一个顶点唯一确定.我们可以考虑把 ...

  4. 洛谷——P1743 矩阵 III

    P1743 矩阵 III 题目背景 usqwedf 改编系列题. 题目描述 给定一个n*m的矩阵,问从左上角走到右下角有多少条路径. 输入输出格式 输入格式: 一行两个正整数 n,m 输出格式: 路径 ...

  5. poj 2287(贪心)

    Tian Ji -- The Horse Racing Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 12490   Acc ...

  6. BestCoder Round #65 (ZYB's Game)

    ZYB's Game Accepts: 672 Submissions: 1207 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536 ...

  7. POJ 2484 A Funny Game 博弈论 对称博弈

    http://poj.org/problem?id=2484 1和2时Alice必胜,3时Bob必胜,其他情况下Bob只需要在Alice取过之后取一次将剩下的硬币链平均分为两份,然后Alice怎么取B ...

  8. BZOJ 3790 神奇项链(manacher+DP+树状数组)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3790 [题目大意] 问最少用几个回文串可以构成给出串,重叠部分可以合并 [题解] 我们 ...

  9. 【kd-tree】hdu5992 Finding Hotels

    比较裸的kd-tree,但是比较考验剪枝. 貌似除了经典的矩形距离剪枝之外, 还必须加个剪枝是某个矩形内的最小价格如果大于价格限制的话,则剪枝. #include<cstdio> #inc ...

  10. python的dict和set

    dict dict是dictionary的缩写,python内置了字典,在其他语言中也称为map,使用键值对储存,具有极快的查找速度. 如果是只用list来实现,就需要两个list,先在第一个list ...