zoukankan      html  css  js  c++  java
  • hibernate建表 一对多 多的一方控制一的一方

    一对多 单向
    <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 stub
    28     }
    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 <?xml version="1.0" encoding="utf-8"?>
     2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     4 <hibernate-mapping>
     5     <class name="cn.itcast.hiberate.sh.domain.Student">
     6         <id name="sid" length="5">
     7             <generator class="increment"></generator>
     8         </id>
     9         <property name="sname" length="20"></property>
    10         <property name="description" length="100"></property>
    11         <!-- 
    12             多对一
    13               column 外键
    14          -->
    15         <many-to-one name="classes" class="cn.itcast.hiberate.sh.domain.Classes" column="cid" cascade="save-update"></many-to-one>
    16     </class>
    17 </hibernate-mapping>

    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 Think
    29  *
    30  */
    31 public class OneToManyTest extends HiberanteUtils{
    32     @Test
    33     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<Student> students = new HashSet<Student>();
    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     @Test
    60     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<Student> students = new HashSet<Student>();
    72        //students.add(student);
    73         
    74         //classes.getStudents().add(student);//在hibernate内部查看的是classes.hbm.xml
    75         
    76         session.save(student);//在hibernate内部查看的是Student.hbm.xml
    77         transaction.commit();
    78         session.close();
    79     }
    80     
    81     @Test
    82     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 }
  • 相关阅读:
    微信小程序
    微信小程序
    微信小程序
    微信小程序
    es5
    es5
    es5||es6
    es5
    5 个常用的软件质量指标
    Solr
  • 原文地址:https://www.cnblogs.com/friends-wf/p/3776134.html
Copyright © 2011-2022 走看看