前提:使用注解映射

一、一对一(夫妻关系表)

  两个表:hus1和wife1表,外键为id,各自有名字hname和wname

  映射得到两个类:Hus1和Wife1类

Hus1类(主表):

package com.weikun.po;import javax.persistence.*;/*** Created by Administrator on 2018/3/26.*/
@Entity
public class Hus1 {private int id;private String hname;private Wife1 wife;@Id@Column(name = "id", nullable = false)public int getId() {return id;}public void setId(int id) {this.id = id;}@Basic@Column(name = "hname", nullable = true, length = 10)public String getHname() {return hname;}public void setHname(String hname) {this.hname = hname;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Hus1 hus1 = (Hus1) o;if (id != hus1.id) return false;if (hname != null ? !hname.equals(hus1.hname) : hus1.hname != null) return false;return true;}@Overridepublic int hashCode() {int result = id;result = 31 * result + (hname != null ? hname.hashCode() : 0);return result;}@OneToOne(cascade ={CascadeType.ALL})@JoinColumn(name = "id", referencedColumnName = "id", nullable = false)public Wife1 getWife() {return wife;}public void setWife(Wife1 wife) {this.wife = wife;}
}

Wife1类

package com.weikun.po;import javax.persistence.*;/*** Created by Administrator on 2018/3/26.*/
@Entity
public class Wife1 {private int id;private String wname;private Hus1 hus1ById;private Hus1 hus;@Id@Column(name = "id", nullable = false)public int getId() {return id;}public void setId(int id) {this.id = id;}@Basic@Column(name = "wname", nullable = true, length = 10)public String getWname() {return wname;}public void setWname(String wname) {this.wname = wname;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Wife1 wife1 = (Wife1) o;if (id != wife1.id) return false;if (wname != null ? !wname.equals(wife1.wname) : wife1.wname != null) return false;return true;}@Overridepublic int hashCode() {int result = id;result = 31 * result + (wname != null ? wname.hashCode() : 0);return result;}@OneToOne@JoinColumn(name = "id", referencedColumnName = "id", nullable = false)public Hus1 getHus1ById() {return hus1ById;}public void setHus1ById(Hus1 hus1ById) {this.hus1ById = hus1ById;}@OneToOne(mappedBy = "wife")public Hus1 getHus() {return hus;}public void setHus(Hus1 hus) {this.hus = hus;}
}

对两个表进行操作:

package com.weikun.dao;import com.weikun.po.Hus1;
import com.weikun.po.Wife1;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;/*** Created by Administrator on 2018/3/26.*/
public class HusDAOImpl {private SessionFactory sf=null;private Configuration configuration=null;public HusDAOImpl(){configuration=new Configuration().configure("hibernate.cfg.xml");sf=configuration.buildSessionFactory();}@Testpublic void update(){Session session=sf.openSession();Transaction trans=session.beginTransaction();try{Hus1 hus=session.load(Hus1.class,6);hus.setHname("C");hus.getWife().setWname("PS");session.update(hus);trans.commit();}catch(Exception e){trans.rollback();e.printStackTrace();}session.close();}@Testpublic void del(){Session session=sf.openSession();Transaction trans=session.beginTransaction();try{Hus1 hus=session.load(Hus1.class,1);session.delete(hus);trans.commit();}catch(Exception e){trans.rollback();e.printStackTrace();}session.close();}@Testpublic void add(){Session session=sf.openSession();Transaction trans=session.beginTransaction();try{Hus1 hus=new Hus1();hus.setHname("JAVA");hus.setId(6);Wife1 wif=new Wife1();wif.setWname("python");wif.setId(6);hus.setWife(wif);wif.setHus(hus);session.save(hus);trans.commit();}catch(Exception e){trans.rollback();e.printStackTrace();}session.close();}@Testpublic void queryById(){Session session=sf.openSession();Hus1 hus=session.load(Hus1.class,1);//
        System.out.printf("%s-%s",hus.getHname(),hus.getWife().getWname());Wife1 wife=session.load(Wife1.class,1);//
        System.out.printf("%s-%s",wife.getWname(),wife.getHus().getHname());session.close();}
}

二、一对多(父子关系表)

  两个表:父亲表(father2)、儿子表(son2),外键为fid,父亲表中属性有fid、fname,儿子表中有属性sid、sname、fid

  映射得到两个类:Father2和Son2类

  Father2类:

package com.weikun.po;import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;/*** Created by Administrator on 2018/3/26.*/
@Entity
public class Father2 {private int fid;private String fname;private Set<Son2> sons=new HashSet<Son2>();@Id@Column(name = "fid", nullable = false)public int getFid() {return fid;}public void setFid(int fid) {this.fid = fid;}@Basic@Column(name = "fname", nullable = true, length = 10)public String getFname() {return fname;}public void setFname(String fname) {this.fname = fname;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Father2 father2 = (Father2) o;if (fid != father2.fid) return false;if (fname != null ? !fname.equals(father2.fname) : father2.fname != null) return false;return true;}@Overridepublic int hashCode() {int result = fid;result = 31 * result + (fname != null ? fname.hashCode() : 0);return result;}@OneToMany(mappedBy = "father",cascade = {CascadeType.ALL})//@Fetch(FetchMode.JOIN)public Set<Son2> getSons() {return sons;}public void setSons(Set<Son2> sons) {this.sons = sons;}
}

  Son2类:

  

package com.weikun.po;import javax.persistence.*;/*** Created by Administrator on 2018/3/26.*/
@Entity
public class Son2 {private int sid;private String sname;private Father2 father2ByFid;private Father2 father2ByFid_0;private Father2 father;@Id@Column(name = "sid", nullable = false)public int getSid() {return sid;}public void setSid(int sid) {this.sid = sid;}@Basic@Column(name = "sname", nullable = true, length = 10)public String getSname() {return sname;}public void setSname(String sname) {this.sname = sname;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Son2 son2 = (Son2) o;if (sid != son2.sid) return false;if (sname != null ? !sname.equals(son2.sname) : son2.sname != null) return false;return true;}@Overridepublic int hashCode() {int result = sid;result = 31 * result + (sname != null ? sname.hashCode() : 0);return result;}@ManyToOne@JoinColumn(name = "fid", referencedColumnName = "fid")public Father2 getFather() {return father;}public void setFather(Father2 father) {this.father = father;}
}

操作父子关系:

package com.weikun.dao;import com.weikun.po.Father2;
import com.weikun.po.Son2;
import org.hibernate.*;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;
import org.junit.Test;import javax.persistence.Table;
import java.util.List;/*** Created by Administrator on 2018/3/26.*/
public class FatherDAOImpl {private SessionFactory sf=null;private Configuration configuration=null;public FatherDAOImpl(){configuration=new Configuration().configure("hibernate.cfg.xml");sf=configuration.buildSessionFactory();}@Testpublic void del(){Session session=sf.openSession();Transaction trans=session.beginTransaction();try {//Son2 s=session.load(Son2.class,6);Father2 s=session.load(Father2.class,6);session.delete(s);trans.commit();}catch(Exception e){trans.rollback();e.printStackTrace();}session.close();}public static void main(String[] args) {}@Testpublic void go(){Father2 s=query();s.getSons().forEach(s1->System.out.println(s1.getSname()));}public Father2 query(){Session session=sf.openSession();Father2 s=null;try {//Son2 s=session.load(Son2.class,6);s=session.get(Father2.class,6);if(!Hibernate.isInitialized(s.getSons())){//lazy的必须解决方案,访问子表情况
                Hibernate.initialize(s.getSons());}//s.getSons().forEach(s1->System.out.println(s1.getSname()));
}catch(Exception e){e.printStackTrace();}session.close();return s;}@Testpublic void  query2(){Session session=sf.openSession();Father2 s=null;try {//Son2 s=session.load(Son2.class,6);Query q=session.createQuery("from Father2 as a ");q.setLockMode("a", LockMode.UPGRADE_NOWAIT);//强力锁止q.setCacheable(true);q.list();Query q2 =session.createQuery("from Father2 where fid=1");q2.setCacheable(true);q2.list();}catch(Exception e){e.printStackTrace();}session.close();}@Testpublic void query1(){Session session=sf.openSession();try {Son2 s=session.load(Son2.class,6);System.out.println(s.getFather().getFname());}catch(Exception e){e.printStackTrace();}session.close();}@Testpublic void add(){Session session=sf.openSession();Transaction trans=session.beginTransaction();try {Father2 f=new Father2();f.setFid(6);f.setFname("JASON");Son2 s=new Son2();s.setSid(6);s.setSname("ROSE");s.setFather(f);Son2 s1=new Son2();s1.setSid(7);s1.setSname("MARY");s1.setFather(f);f.getSons().add(s);f.getSons().add(s1);session.save(f);trans.commit();}catch(Exception e){trans.rollback();e.printStackTrace();}session.close();}
}

三、多对多(老师学生关系)

  三个表只映射两个,tea、stu,而管理两个表关系的teastu表不用映射导入

  映射tea和stu表得到Stu类和Tea类

  Tea类:

  

package com.weikun.po;import org.hibernate.annotations.Cascade;import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;/*** Created by Administrator on 2018/3/26.*/
@Entity
public class Tea {private int tid;private String tname;private Set<Stu> stus=new HashSet<>();@Id@Column(name = "tid", nullable = false)public int getTid() {return tid;}public void setTid(int tid) {this.tid = tid;}@Basic@Column(name = "tname", nullable = true, length = 10)public String getTname() {return tname;}public void setTname(String tname) {this.tname = tname;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Tea tea = (Tea) o;if (tid != tea.tid) return false;if (tname != null ? !tname.equals(tea.tname) : tea.tname != null) return false;return true;}@Overridepublic int hashCode() {int result = tid;result = 31 * result + (tname != null ? tname.hashCode() : 0);return result;}@Cascade(value=org.hibernate.annotations.CascadeType.SAVE_UPDATE)@ManyToMany()@JoinTable(name = "teastu", catalog = "res", schema = "res", joinColumns = @JoinColumn(name = "tid", referencedColumnName = "tid", nullable = false), inverseJoinColumns = @JoinColumn(name = "sid", referencedColumnName = "sid", nullable = false))public Set<Stu> getStus() {return stus;}public void setStus(Set<Stu> stus) {this.stus = stus;}
}

  Stu类:

  

package com.weikun.po;import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;/*** Created by Administrator on 2018/3/26.*/
@Entity
public class Stu {private int sid;private String sname;private Set<Tea> teas=new HashSet<>();@Id@Column(name = "sid", nullable = false)public int getSid() {return sid;}public void setSid(int sid) {this.sid = sid;}@Basic@Column(name = "sname", nullable = true, length = 10)public String getSname() {return sname;}public void setSname(String sname) {this.sname = sname;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Stu stu = (Stu) o;if (sid != stu.sid) return false;if (sname != null ? !sname.equals(stu.sname) : stu.sname != null) return false;return true;}@Overridepublic int hashCode() {int result = sid;result = 31 * result + (sname != null ? sname.hashCode() : 0);return result;}@ManyToMany(mappedBy = "stus")public Set<Tea> getTeas() {return teas;}public void setTeas(Set<Tea> teas) {this.teas = teas;}
}

操纵师生关系的类:

package com.weikun.dao;import com.weikun.po.Father2;
import com.weikun.po.Stu;
import com.weikun.po.Tea;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;/*** Created by Administrator on 2018/3/26.*/
public class TeaDAOImpl {private SessionFactory sf=null;private Configuration configuration=null;public TeaDAOImpl(){configuration=new Configuration().configure("hibernate.cfg.xml");sf=configuration.buildSessionFactory();}@Testpublic void del(){Session session=sf.openSession();Transaction trans=session.beginTransaction();try {Tea t=session.load(Tea.class,6);session.delete(t);trans.commit();}catch(Exception e){trans.rollback();e.printStackTrace();}session.close();}@Testpublic void add(){Session session=sf.openSession();Transaction trans=session.beginTransaction();try {Tea t=new Tea();t.setTid(6);t.setTname("MARY");Tea t1=new Tea();t1.setTid(7);t1.setTname("NICK");Stu s1=new Stu();s1.setSid(10);s1.setSname("S1");s1.getTeas().add(t);s1.getTeas().add(t1);Stu s2=new Stu();s2.setSid(11);s2.setSname("S2");s2.getTeas().add(t);s2.getTeas().add(t1);t1.getStus().add(s1);t1.getStus().add(s2);t.getStus().add(s1);t.getStus().add(s2);session.save(t);session.save(t1);trans.commit();}catch(Exception e){trans.rollback();e.printStackTrace();}session.close();}}

转载于:https://www.cnblogs.com/television/p/8682310.html

Hibernate的多种关系映射(oto、otm、mtm)相关推荐

  1. hibernate中一对一关系映射

    这篇文章讲述的是hibernate中一对一关系映射,如有错误或者不当之处还望各位大神批评指正. 一对一映射(外键关联) 目标 假设一个人对应养一只狗,一只狗只能由一个人来养,完成一对一相关操作. 类编 ...

  2. Hibernate之对象关系映射文件

    一.对象关系映射文件 POJO类和关系数据库之间的映射可以用一个XML文档来定义 在运行时Hibernate将根据这个映射文件来生成各种SQL语句 映射文件的拓展名为 .hbm.xml 1.映射文件说 ...

  3. Java程序员从笨鸟到菜鸟之(五十七)细谈Hibernate(八)Hibernate集合Map关系映射

                 对于hibernate中,集合属性在Hibernate的映射文件中是非常常见的,也是非常重要的内容,理解和熟练掌握常用的集合属性则显得更为重要.在hibernate的配置文件 ...

  4. Hibernate之对象关系映射

    一.一对多关联关系 1.单向n-1 单向n-1关联只需从n的一端可以访问1的一端 Hibernate使用<many-to-one>元素来映射多对一关联关系 <!-- 映射多对一的关联 ...

  5. (经典)Hibernate多对一关系映射(四)

    多对一关系主要应用在添加,修改,列表上,删除功能用不到多对一关系.(实际开发中多对一的应用较多) 例:这里多加入一张新闻类型表,完成新闻的分类功能. 在新闻表中多加入一个分类的字段,表示该新闻属于某一 ...

  6. (经典)Hibernate多对多关系映射(五)

    多对多关系是产生在三张表的关系中的,必须有一张中间表,必须保证中间表只有两个字段,必须是复合主键,必须是另两张表的外键. 一.用多对多关系来设计类 例如:学生选课 这里只创建学生和课程类,中间表不生成 ...

  7. 详谈Hibernate框架关系映射!

    接触Hibernate也有一小段的时间了,愈发的觉得Hibernate是个神奇的东西,为什么这么说呢?因为你可以不懂一行sql,直接面向对象,就可以将数据直接保存到数据库去!! 你还可以保存一个对象, ...

  8. Hibernate中的一对多关系映射

    Hibernate框架中关系映射中有:一对一.一对多和多对多,但常用的就是一对多,所以本篇博客就大体概述了一下一对多关系映射. 一对多关系: 例如:客户和订单,客户是一,订单是多 创建customer ...

  9. 【大话Hibernate】Hibernate两种实体关系映射详解

    实体类与数据库之间存在某种映射关系,Hibernate依据这种映射关系完成数据的存取,因此映射关系的配置在Hibernate中是最关键的.Hibernate支持xml配置文件与@注解配置两种方式.xm ...

最新文章

  1. 74芯片引脚真值表汇总
  2. 使用form上传文件到application server的另一种办法
  3. 服务器内存延迟,内存带宽、延迟性能测试
  4. 最近公共祖先 python_求二叉搜索树的最近公共祖先
  5. 老鸟对菜鸟的一些建议
  6. django abstract base class ---- 抽象基类
  7. ZooKeeper监控
  8. 如何安装uclient_UClient软件下载-UClient客户端下载 v2.0.0.1580官方版--pc6下载站
  9. GMSSL双证书认证C/S(Linux版)
  10. 中国制药机械行业发展态势与运营展望分析报告2022版
  11. php洗车分销系统_全国首个PHP宝塔IDC分销系统
  12. 教你做一个微信添加好友收付款的个性二维码
  13. 如何让c语言输出字符响一声,printf()用法
  14. 《JAVA设计模式系列》责任链模式
  15. HANA DB重置SYSTEM密码
  16. 苹果电脑上好用的4款摄影后期修饰剪辑工具
  17. access数据库管理软件收集下载
  18. (银行简单的管理系统)java实训小型应用开发——数据库,GUI、客服端
  19. 概率论知识回顾(四):事件独立性、贝努利概型
  20. 整理的通信专业原理知识框架(考研专业课的同学可以看一下)

热门文章

  1. flash特效原理:图片切换滚动
  2. Bootstrap 图片轮播
  3. 使用React Hooks 时要避免的5个错误!
  4. oracle 11.2.0.3RAC升级到11.2.0.4
  5. matlab 场仿真,利用MATLAB软件实现温度场的仿真
  6. 作为通信的学子,怎么在深度学习领域里面发论文
  7. 机械学习07: 常用统计分布:正态分布、T分布、卡方分布、F分布
  8. Python脚本自动化备份飞塔,华为,思科等设备配置文件。
  9. 【生活】年化收益率、七日年化收益率这些事
  10. Srping 中的AOP