一、多对一

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

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

  1. package com.lxit.entity;
  2.  
  3. import java.io.Serializable;
  4.  
  5. public class Student implements Serializable {
  6.  
  7.     
  8.  
  9.     public Student() {
  10.  
  11.     }
  12.  
  13.     public Student(String sname, String sex, String address) {
  14.  
  15.         this.sname = sname;
  16.  
  17.         this.sex = sex;
  18.  
  19.         this.address = address;
  20.  
  21.     }
  22.  
  23.     public Student(String sname, String sex, String address, Grade grade) {
  24.  
  25.         this.sname = sname;
  26.  
  27.         this.sex = sex;
  28.  
  29.         this.address = address;
  30.  
  31.         this.grade = grade;
  32.  
  33.     }
  34.  
  35.     private int sid;
  36.  
  37.     private String sname;
  38.  
  39.     private String sex;
  40.  
  41.     private String address;
  42.  
  43.     
  44.  
  45.     //单向多对一:在多的一方封装一的一方的实体对象
  46.  
  47.     private Grade grade;
  48.  
  49.     
  50.  
  51.     public int getSid() {
  52.  
  53.         return sid;
  54.  
  55.     }
  56.  
  57.     public void setSid(int sid) {
  58.  
  59.         this.sid = sid;
  60.  
  61.     }
  62.  
  63.     public String getSname() {
  64.  
  65.         return sname;
  66.  
  67.     }
  68.  
  69.     public void setSname(String sname) {
  70.  
  71.         this.sname = sname;
  72.  
  73.     }
  74.  
  75.     public String getSex() {
  76.  
  77.         return sex;
  78.  
  79.     }
  80.  
  81.     public void setSex(String sex) {
  82.  
  83.         this.sex = sex;
  84.  
  85.     }
  86.  
  87.     public String getAddress() {
  88.  
  89.         return address;
  90.  
  91.     }
  92.  
  93.     public void setAddress(String address) {
  94.  
  95.         this.address = address;
  96.  
  97.     }
  98.  
  99.     public Grade getGrade() {
  100.  
  101.         return grade;
  102.  
  103.     }
  104.  
  105.     public void setGrade(Grade grade) {
  106.  
  107.         this.grade = grade;
  108.  
  109.     }
  110.  
  111.     @Override
  112.  
  113.     public String toString() {
  114.  
  115.         return "Student [sid=" + sid + ", sname=" + sname + ", sex=" + sex
  116.  
  117.                 + ", address=" + address + "]";
  118.  
  119.     }

}

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

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

</hibernate-mapping>

二、一对多

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

  1. package com.lxit.entity;
  2.  
  3. import java.io.Serializable;
  4.  
  5. import java.util.HashSet;
  6.  
  7. import java.util.Set;
  8.  
  9. public class Grade implements Serializable{
  10.  
  11.     
  12.  
  13.     public Grade() {
  14.  
  15.     }
  16.  
  17.     
  18.  
  19.     public Grade(String gname) {
  20.  
  21.         this.gname = gname;
  22.  
  23.     }
  24.  
  25.     
  26.  
  27.     //在一方添加多方的集合
  28.  
  29.     public Set<Student> students = new HashSet<Student>();
  30.  
  31.     private int gid;
  32.  
  33.     private String gname;
  34.  
  35.     
  36.  
  37.     public int getGid() {
  38.  
  39.         return gid;
  40.  
  41.     }
  42.  
  43.     public void setGid(int gid) {
  44.  
  45.         this.gid = gid;
  46.  
  47.     }
  48.  
  49.     public String getGname() {
  50.  
  51.         return gname;
  52.  
  53.     }
  54.  
  55.     public void setGname(String gname) {
  56.  
  57.         this.gname = gname;
  58.  
  59.     }
  60.  
  61.     public Set<Student> getStudents() {
  62.  
  63.         return students;
  64.  
  65.     }
  66.  
  67.     public void setStudents(Set<Student> students) {
  68.  
  69.         this.students = students;
  70.  
  71.     } 
  72. } 

Grade映射文件

  1. <?xml version="1.0"?>
  2.  
  3. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4.  
  5. "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
  6.  
  7. <hibernate-mapping>
  8.  
  9.     <!-- 实体映射文件:将实体对象映射为数据库中的字段 -->
  10.  
  11.      <class name="com.lxit.entity.Grade" table="Grade">
  12.  
  13.          <id name="gid" column="gid">
  14.  
  15.              <generator class="native"></generator>
  16.  
  17.          </id>
  18.  
  19.          <property name="gname" type="java.lang.String">
  20.  
  21.              <column name="gname" length="20"></column>
  22.  
  23.          </property>
  24.  
  25.          <!-- 
  26.  
  27.              inverse:表示将维护外键的职责交友多方来维护,默认为false
  28.  
  29.              cascade:表示级联效果,当保存班级时,班级对应的学生一起保存
  30.  
  31.          -->
  32.  
  33.          <set name="students" table="Student" cascade="all">
  34.  
  35.              <key column="gid"></key>
  36.  
  37.              <one-to-many class="com.lxit.entity.Student"/>
  38.  
  39.          </set>
  40.  
  41.      </class>
  42. </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. 2017 Hackatari Codeathon C. Arcade(DP)(滚动数组)

    C. Arcade time limit per test 1 second memory limit per test 256 megabytes input standard input outp ...

  2. Linux命令之nice和renice

    (1).nice命令 nice [选项] [命令 [参数]] 在执行程序之前,改变优先级.以调整过的优先级运行命令.如果没有给出命令,就显示当前的优先级.优先级范围从-20到19,越小优先级越高,默认 ...

  3. [xsy1144]选物品

    题意:给定$a_{1\cdots n},b_{1\cdots n}$,询问是给定$l,r$,找出$a',b'$使得$\sum\limits_{i=l}^r\max(\left|a'-a_i\right ...

  4. 【CCpp程序设计2017】简单进销存

    题目:简单进销存 功能要求: 实现如下的菜单(按数字选择菜单功能): 1. 显示存货列表 2. 入库 3. 出库 4. 退出程序 实现菜单对应功能(需记录货物的型号.数量等信息): 程序启动时从文件中 ...

  5. 【SAM】POJ1509-Glass Beads

    [题目大意] 求一个循环数列的最小表示法. [思路] 把原创复制一遍放在后面,建立SAM,从s按字典序开始跑长度L即可. 板子来源(作者见连接内):

  6. 【斜率优化】bzoj3675-[Apio2014]序列分割&&Uoj104

    题目大意 将一个长度为N的非负整数序列分割成k+l个非空的子序列,每次选择一位置分割后,将会得到一定的分数,这个分数为两个新序列中元素和的乘积.求最大的分数. [UOJ104]并输出任意一种方案 思路 ...

  7. 【动态规划】POJ3616-Milking Time

    [题目大意] 奶牛Bessie在0~N时间段产奶.农夫约翰有M个时间段可以挤奶,时间段[a,b]Bessie能挤到的牛奶量v.奶牛产奶后需要休息R小时才能继续下一次产奶,求Bessie最大的挤奶量. ...

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

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

  9. 活动中使用提示框(Toast)

    任务名称:活动中使用Toast 任务现象:点击button时,会弹出提示框:You Click Button 步骤 1.创建一个项目,新建活动和加载布局.参考: http://8c925c9a.wiz ...

  10. 【常见加密方法】Base64编码&Tea算法简介

    Base64编码 [Base64编码是什么] Base64是一种基于64个可打印字符来表示二进制数据的表示方法. ——维基百科 Base64,顾名思义,是基于64种可视字符的编码方式.这64种符号由A ...