博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hibernate建表 一对多 多的一方控制一的一方
阅读量:7120 次
发布时间:2019-06-28

本文共 4593 字,大约阅读时间需要 15 分钟。

一对多 单向

<one-to-many>
通过calss操作student 外键在student表中,所以外键由student维护
<many-to-one>
通过student操作class 外键在student中,所以自动维护student的外键 没有inverse属性

建议用多对一这个方向的操作效率比较高

Student.java

1 package cn.itcast.hiberate.sh.domain; 2  3 public class Student { 4     private Long sid; 5     private String sname; 6     private String description; 7     Classes classes; 8      9     public Classes getClasses() {10         return classes;11     }12     public void setClasses(Classes classes) {13         this.classes = classes;14     }15     public Long getSid() {16         return sid;17     }18     public void setSid(Long sid) {19         this.sid = sid;20     }21     public Student(String sname, String description) {22         super();23         this.sname = sname;24         this.description = description;25     }26     public Student() {27         // TODO Auto-generated constructor stub28     }29     public String getSname() {30         return sname;31     }32     public void setSname(String sname) {33         this.sname = sname;34     }35     public String getDescription() {36         return description;37     }38     public void setDescription(String description) {39         this.description = description;40     }41     42 }

Student.hbm.xml 

1 
2 4
5
6
7
8
9
10
11
15
16
17

test.java语句

1 package cn.itcast.hibernate.sh.test; 2  3 import java.util.HashSet; 4 import java.util.Set; 5  6 import org.hibernate.Session; 7 import org.hibernate.Transaction; 8 import org.junit.Test; 9 10 import cn.itcast.hiberate.sh.domain.Classes;11 import cn.itcast.hiberate.sh.domain.Student;12 import cn.itcast.hibernate.sh.utils.HiberanteUtils;13 14 /**15  * 3、新建一个班级的时候同时新建一个学生16  * 4、已经存在一个班级,新建一个学生,建立学生与班级之间的关系17  * 5、已经存在一个学生,新建一个班级,把学生加入到该班级18  * 6、把一个学生从一个班级转移到另一个班级19  * 7、解析一个班级和一个学生之间的关系20  * 8、解除一个班级和一些学生之间的关系21  * 9、解除该班级和所有的学生之间的关系22  * 10、已经存在一个班级,已经存在一个学生,建立该班级与该学生之间的关系23  * 11、已经存在一个班级,已经存在多个学生,建立多个学生与班级之间的关系24  * 12、删除学生25  * 13、删除班级26  *     删除班级的时候同时删除学生27  *     在删除班级之前,解除班级和学生之间的关系28  * @author Think29  *30  */31 public class OneToManyTest extends HiberanteUtils{32     @Test33     public void testSaveStudent_Cascade_Classes_Save(){34         Session session = sessionFactory.openSession();35         Transaction transaction = session.beginTransaction();36         Student student = new Student();37         student.setSname("班秘");38         student.setDescription("很神秘的一个工作");39         40         Classes classes = new Classes();41         classes.setCname("老毕亲子班");42         classes.setDescription("都是老毕的亲戚");43         44         student.setClasses(classes);45 //        Set
students = new HashSet
();46 // students.add(student);47 // 48 // classes.setStudents(students);49 session.save(student);50 51 transaction.commit();52 session.close();53 }54 55 56 /**57 * 一对多,从多的一端维护关系效率比较高58 */59 @Test60 public void testSaveStudent_R(){61 Session session = sessionFactory.openSession();62 Transaction transaction = session.beginTransaction();63 64 Student student = new Student();65 student.setSname("这个人");66 student.setDescription("很好");67 68 Classes classes = (Classes)session.get(Classes.class, 2L);69 student.setClasses(classes);70 71 //Set
students = new HashSet
();72 //students.add(student);73 74 //classes.getStudents().add(student);//在hibernate内部查看的是classes.hbm.xml75 76 session.save(student);//在hibernate内部查看的是Student.hbm.xml77 transaction.commit();78 session.close();79 }80 81 @Test82 public void testRelese_R(){83 Session session = sessionFactory.openSession();84 Transaction transaction = session.beginTransaction();85 Classes classes = (Classes)session.get(Classes.class, 2L);86 Student student7 = (Student)session.get(Student.class, 7L);87 Student student8 = (Student)session.get(Student.class, 8L);88 student7.setClasses(null);89 student8.setClasses(null);       //也可以用以下替代

        Classes classes=(Classes) session.get(Classes.class, 9L);

        Set<Student> stu=classes.getStudents();
        for(Student s:stu)
          s.setClasses(null);

90         transaction.commit();91         session.close();92     }93 }

 

转载地址:http://bhnel.baihongyu.com/

你可能感兴趣的文章
比较好玩的动态添加网页元素
查看>>
关于bacula网络备份软件的安装以及配置1
查看>>
对adapter的封装优化
查看>>
efs解密-Advanced EFS Data Recovery2.1-含注册KEY
查看>>
java运行环境(JRE)
查看>>
安装System Center 2012 R2 数据库
查看>>
iOS 分组索引和索引分区
查看>>
Apache+php 在windows下的配置
查看>>
求二叉树的深度
查看>>
PostFix邮件网关无法向公网投递邮件问题分析
查看>>
可替代的C语言开发环境
查看>>
无任何网络提供程序接受指定的网络路径解决方法
查看>>
XenDesktop 5之痛---Database Transaction Log速增
查看>>
DB2计划三招“破甲” IBM在华能否得偿所愿
查看>>
高可用集群原理概念详述
查看>>
mount NTFS harddisk on slackware ver13.37
查看>>
Liferay Dynamic CSS Filter方法的研究 - 总体过程
查看>>
看完性能简报,想不优化好都难!
查看>>
Qt学习之路(4):初探信号槽
查看>>
CSS伪类的又一个小应用,实现下拉菜单
查看>>