加载中...

Hibernate(六)一对多映射(多对一)


一、Hinbernate中持久化类的关联关系

在数据库中,表表之间是通过外键关联的,在程序中是要转化为持久化类也就是(JAVA Bean)来实例的。

但在Hibernater中持久化的之间的映射关系,不是通外键建立关联,而是通过属性.主要有以下几种

  • 一对一,
  • 一对多(多对一)
  • 多对多

关联方向:

  • 单向关联
  • 双向关联

二、一对多单向关联关系

2.1、建立数据库表

班级表,和学生表,学生生通过班级表中的,班级编号为外键

  1. --班级表
  2. create table grade
  3. (
  4. gid number primary key, --班级ID
  5. gname varchar2(50), --班级名称
  6. gdesc varchar2(50) --班级介绍
  7. );
  8. --学生表
  9. create table student
  10. (
  11. sid number primary key, --主键ID学生ID
  12. sname varchar2(20), --学生姓名
  13. sex varchar2(20), --学生性别
  14. gid number references grade(gid) ---外键班级ID
  15. );

2.2、建立持久化类和映射配置文件

班级和学生类

  1. package entity;
  2. import java.util.HashSet;
  3. import java.util.Set;
  4. /*
  5. * 班级类
  6. */
  7. public class Grade implements java.io.Serializable {
  8. // Fields
  9. private static final long serialVersionUID = 1L;
  10. private int gid;
  11. private String gname;
  12. private String gdesc;
  13. private Set<Student> students = new HashSet<Student> ();
  14. // Constructors
  15.  
  16. /** default constructor */
  17. public Grade() {
  18. }
  19. /** minimal constructor */
  20. public Grade(int gid) {
  21. this.gid = gid;
  22. }
  23. /** full constructor */
  24. public Grade(int gid, String gname, String gdesc, Set<Student> students) {
  25. this.gid = gid;
  26. this.gname = gname;
  27. this.gdesc = gdesc;
  28. this.students = students;
  29. }
  30. // Property accessors
  31.  
  32. public int getGid() {
  33. return this.gid;
  34. }
  35. public void setGid(int gid) {
  36. this.gid = gid;
  37. }
  38. public String getGname() {
  39. return this.gname;
  40. }
  41. public void setGname(String gname) {
  42. this.gname = gname;
  43. }
  44. public String getGdesc() {
  45. return this.gdesc;
  46. }
  47. public void setGdesc(String gdesc) {
  48. this.gdesc = gdesc;
  49. }
  50. public Set<Student> getStudents() {
  51. return this.students;
  52. }
  53. public void setStudents(Set<Student> students) {
  54. this.students = students;
  55. }
  56. }
View Code

 

学生类

  1. package entity;
  2. /*
  3. * 学生类
  4. */
  5. public class Student implements java.io.Serializable {
  6. // Fields
  7.  
  8. private static final long serialVersionUID = 1L;
  9. private int sid;
  10. private String sname;
  11. private String sex;
  12. // Constructors
  13.  
  14. /** default constructor */
  15. public Student() {
  16. }
  17. /** minimal constructor */
  18. public Student(int sid) {
  19. this.sid = sid;
  20. }
  21. /** full constructor */
  22. public Student(int sid, String sname, String sex ) {
  23. this.sid = sid;
  24. this.sname = sname;
  25. this.sex = sex;
  26. }
  27. // Property accessors
  28.  
  29. public int getSid() {
  30. return this.sid;
  31. }
  32. public void setSid(int sid) {
  33. this.sid = sid;
  34. }
  35. public String getSname() {
  36. return this.sname;
  37. }
  38. public void setSname(String sname) {
  39. this.sname = sname;
  40. }
  41. public String getSex() {
  42. return this.sex;
  43. }
  44. public void setSex(String sex) {
  45. this.sex = sex;
  46. }
  47. }
View Code

 

 

hibernate.cf.xml和班级、学生的配置文件

  1. <?xml version='1.0' encoding='UTF-8'?>
  2. <!DOCTYPE hibernate-configuration PUBLIC
  3. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
  5.  
  6. <hibernate-configuration>
  7.  
  8. <session-factory>
  9. <property name="dialect">
  10. org.hibernate.dialect.Oracle9Dialect
  11. </property>
  12. <property name="connection.url">
  13. jdbc:oracle:thin:@localhost:1521:orcl
  14. </property>
  15. <property name="connection.username">root</property>
  16. <property name="connection.password">root</property>
  17. <property name="connection.driver_class">
  18. oracle.jdbc.OracleDriver
  19. </property>
  20. <property name="show_sql">true</property>
  21. <property name="format_sql">true</property>
  22.  
  23. <mapping resource="entity/Grade.hbm.xml" />
  24. <mapping resource="entity/Student.hbm.xml" />
  25.  
  26. </session-factory>
  27.  
  28. </hibernate-configuration>

持久类配置先来学生类

  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.  
  5. <hibernate-mapping>
  6. <class name="entity.Student" table="STUDENT" schema="ROOT">
  7. <id name="sid" type="java.lang.Integer">
  8. <column name="SID" precision="22" scale="0" />
  9. <generator class="assigned" />
  10. </id>
  11. <property name="sname" type="java.lang.String">
  12. <column name="SNAME" length="20" />
  13. </property>
  14. <property name="sex" type="java.lang.String">
  15. <column name="SEX" length="20" />
  16. </property>
  17. </class>
  18. </hibernate-mapping>

班级类配置

  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.  
  5. <hibernate-mapping>
  6. <class name="entity.Grade" table="GRADE" schema="ROOT">
  7. <id name="gid" type="java.lang.Integer">
  8. <column name="GID" precision="22" scale="0" />
  9. <generator class="assigned" />
  10. </id>
  11. <property name="gname" type="java.lang.String">
  12. <column name="GNAME" length="50" />
  13. </property>
  14. <property name="gdesc" type="java.lang.String">
  15. <column name="GDESC" length="50" />
  16. </property>
  17. <!--建立set属性,也可以建立list和持久化类中一致就行 -->
  18. <set name="students">
  19. <key>
  20. <!--这里的列是指学生表中的班级编号 -->
  21. <column name="GID" precision="22" scale="0" />
  22. </key>
  23. <!-- 通过class属性指定set的属性 -->
  24. <one-to-many class="entity.Student" />
  25. </set>
  26. </class>
  27. </hibernate-mapping>

测试类

  1. package Test;
  2. import java.util.Set;
  3. import org.hibernate.Session;
  4. import org.hibernate.Transaction;
  5. import org.hibernate.cfg.Configuration;
  6. import entity.Grade;
  7. import entity.Student;
  8. public class Demo1 {
  9. /**
  10. * 测试类
  11. */
  12. public static void main(String[] args) {
  13. save();
  14. find();
  15. update();
  16. }
  17. public static void save() {
  18. // 声明班级对象,并赋值
  19. Grade grade = new Grade();
  20. grade.setGid(201504);
  21. grade.setGname("Java一班");
  22. grade.setGdesc("刚开始学习JAVA");
  23. // 声明2个学生对象
  24. Student stu1 = new Student();
  25. stu1.setSid(201504012);
  26. stu1.setSname("张三");
  27. stu1.setSex("男");
  28. Student stu2 = new Student();
  29. stu2.setSid(201504013);
  30. stu2.setSname("李四");
  31. stu2.setSex("女");
  32. // 将学生添加到班级
  33. grade.getStudents().add(stu1);
  34. grade.getStudents().add(stu2);
  35. // 建立session
  36. Session session = new Configuration().configure().buildSessionFactory()
  37. .openSession();
  38. // 开始事务
  39. Transaction transaction = session.beginTransaction();
  40. // 保存班级
  41. session.save(grade);
  42. // 保存学生
  43. session.save(stu1);
  44. session.save(stu2);
  45. // 提交事务
  46. transaction.commit();
  47. // 关闭session
  48. session.close();
  49. }
  50. /*
  51. * 将基中一个学生更改为别一个班级
  52. */
  53. public static void update() {
  54. // 声明班级对象,并赋值
  55. Grade grade = new Grade();
  56. grade.setGid(201506);
  57. grade.setGname("Java二班");
  58. grade.setGdesc("学习JAVA二年级");
  59. // 获取一个学生的信息
  60. // 建立session
  61. Session session = new Configuration().configure().buildSessionFactory()
  62. .openSession();
  63. // 开始事务
  64. Transaction transaction = session.beginTransaction();
  65. Student stu1=(Student) session.get(Student.class, 201504013);
  66. //将学生添加到这个新的班级
  67. grade.getStudents().add(stu1);
  68. // 保存班级
  69. session.save(grade);
  70. // 保存学生
  71. session.save(stu1);
  72. // 提交事务
  73. transaction.commit();
  74. // 关闭session
  75. session.close();
  76. }
  77. // 查询班级
  78. public static void find() {
  79. // 建立session
  80. Session session = new Configuration().configure().buildSessionFactory()
  81. .openSession();
  82. Grade g = (Grade) session.get(Grade.class, 201504);
  83. System.out.println("班级信息:" + g.getGid() + "\t" + g.getGname()
  84. + g.getGdesc());
  85. // 通过班级获取这个班级的学生信息
  86. System.out.println("201504班的学生信息如下:");
  87. Set<Student> set = g.getStudents();
  88. for (Student stu : set) {
  89. System.out.println(stu.getSid() + "\t" + stu.getSname() + "\t"
  90. + stu.getSex());
  91. }
  92. }
  93. }

以上只上单向关联,一般都会有双向关联

同样要在学生类中添加Grade 属性

在学生类的配置文件中配置关联字段

 二、建立双向关联

2.1、更改学生类和配置文件

  1. package entity;
  2. /*
  3. * 学生类
  4. */
  5. public class Student implements java.io.Serializable {
  6. // Fields
  7.  
  8. private static final long serialVersionUID = 1L;
  9. private int sid;
  10. private String sname;
  11. private String sex;
  12. //增加班级属性
  13. private Grade grade;
  14. // Constructors
  15.  
  16. /** default constructor */
  17. public Student() {
  18. }
  19. /** minimal constructor */
  20. public Student(int sid) {
  21. this.sid = sid;
  22. }
  23. /** full constructor */
  24. public Student(int sid, String sname, String sex ) {
  25. this.sid = sid;
  26. this.sname = sname;
  27. this.sex = sex;
  28. }
  29. // Property accessors
  30.  
  31. public int getSid() {
  32. return this.sid;
  33. }
  34. public void setSid(int sid) {
  35. this.sid = sid;
  36. }
  37. public String getSname() {
  38. return this.sname;
  39. }
  40. public void setSname(String sname) {
  41. this.sname = sname;
  42. }
  43. public String getSex() {
  44. return this.sex;
  45. }
  46. public void setSex(String sex) {
  47. this.sex = sex;
  48. }
  49. public Grade getGrade() {
  50. return grade;
  51. }
  52. public void setGrade(Grade grade) {
  53. this.grade = grade;
  54. }
  55. }

配置文件 

  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.  
  5. <hibernate-mapping>
  6. <class name="entity.Student" table="STUDENT" schema="ROOT">
  7. <id name="sid" type="java.lang.Integer">
  8. <column name="SID" precision="22" scale="0" />
  9. <generator class="assigned" />
  10. </id>
  11. <property name="sname" type="java.lang.String">
  12. <column name="SNAME" length="20" />
  13. </property>
  14. <property name="sex" type="java.lang.String">
  15. <column name="SEX" length="20" />
  16. </property>
  17. <!--配置grade属性 -->
  18. <many-to-one name="grade" class="entity.Grade">
  19. <!--指定学生表中的外键 -->
  20. <column name="GID" />
  21. </many-to-one>
  22. </class>
  23. </hibernate-mapping>

2.2、测试类

建立双向关联后,就可以通过学生来获取班级信息

清空数据表中的数据

  1. package Test;
  2. import org.hibernate.Session;
  3. import org.hibernate.cfg.Configuration;
  4. import entity.Student;
  5. public class Demo2 {
  6. /**
  7. * 测试类
  8. */
  9. public static void main(String[] args) {
  10.  save();
  11. findByStu();
  12. }
  13. public static void findByStu(){
  14. Session session = new Configuration().configure().buildSessionFactory()
  15. .openSession();
  16. //获取一个学生的信息 get方法为通过主键查询
  17. Student stu=(Student) session.get(Student.class, 201504013);
  18. System.out.println("学生信息:\t"+stu.getSid()+"\t"+stu.getSname()+"\t"+stu.getSex());
  19. //通过学生信息得到班级信息
  20. System.out.println("这个学生的班级信息:"+stu.getGrade().getGid()+"\t"+stu.getGrade().getGname()+"\t"+stu.getGrade().getGdesc());
  21. }
  22. }
  23. public static void save() {
  24. // 声明班级对象,并赋值
  25. Grade grade = new Grade();
  26. grade.setGid(201504);
  27. grade.setGname("Java一班");
  28. grade.setGdesc("刚开始学习JAVA");
  29. // 声明2个学生对象
  30. Student stu1 = new Student();
  31. stu1.setSid(201504012);
  32. stu1.setSname("张三");
  33. stu1.setSex("男");
  34. stu1.setGrade(grade);
  35. Student stu2 = new Student();
  36. stu2.setSid(201504013);
  37. stu2.setSname("李四");
  38. stu2.setSex("女");
  39. stu2.setGrade(grade);
  40. // 将学生添加到班级
  41. /*grade.getStudents().add(stu1);
  42. grade.getStudents().add(stu2);*/
  43. // 建立session
  44. Session session = new Configuration().configure().buildSessionFactory()
  45. .openSession();
  46. // 开始事务
  47. Transaction transaction = session.beginTransaction();
  48. // 保存班级
  49. session.save(grade);
  50. // 保存学生
  51. session.save(stu1);
  52. session.save(stu2);
  53. // 提交事务
  54. transaction.commit();
  55. // 关闭session
  56. session.close();
  57. }

三、级联保存和删除

  1. 能不能只保存学生时,同时保存班级呢,或者保存班级时,同时保存学生呢

3.1、cascade属性

 

保存班级时,同时保存学生信息

修改班级配置,在set标签中添加cascade属性,设置为save-update

  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.  
  5. <hibernate-mapping>
  6. <class name="entity.Grade" table="GRADE" schema="ROOT">
  7. <id name="gid" type="java.lang.Integer">
  8. <column name="GID" precision="22" scale="0" />
  9. <generator class="assigned" />
  10. </id>
  11. <property name="gname" type="java.lang.String">
  12. <column name="GNAME" length="50" />
  13. </property>
  14. <property name="gdesc" type="java.lang.String">
  15. <column name="GDESC" length="50" />
  16. </property>
  17. <!--建立set属性,也可以建立list和持久化类中一致就行 -->
  18. <set name="students" cascade="save-update">
  19. <key>
  20. <!--这里的列是指学生表中的班级编号 -->
  21. <column name="GID" precision="22" scale="0" />
  22. </key>
  23. <!-- 通过class属性指定set的属性 -->
  24. <one-to-many class="entity.Student" />
  25. </set>
  26. </class>
  27. </hibernate-mapping>

测试类

  1. package Test;
  2. import org.hibernate.Session;
  3. import org.hibernate.Transaction;
  4. import org.hibernate.cfg.Configuration;
  5. import entity.Grade;
  6. import entity.Student;
  7. public class Demo3 {
  8. /**
  9. * @param args
  10. */
  11. public static void main(String[] args) {
  12. save();
  13. }
  14. public static void save() {
  15. // 声明班级对象,并赋值
  16. Grade grade = new Grade();
  17. grade.setGid(201504);
  18. grade.setGname("Java一班");
  19. grade.setGdesc("刚开始学习JAVA");
  20. // 声明2个学生对象
  21. Student stu1 = new Student();
  22. stu1.setSid(201504012);
  23. stu1.setSname("张三");
  24. stu1.setSex("男");
  25. stu1.setGrade(grade);
  26. Student stu2 = new Student();
  27. stu2.setSid(201504013);
  28. stu2.setSname("李四");
  29. stu2.setSex("女");
  30. stu2.setGrade(grade);
  31. // 将学生添加到班级
  32. grade.getStudents().add(stu1);
  33. grade.getStudents().add(stu2);
  34. // 建立session
  35. Session session = new Configuration().configure().buildSessionFactory()
  36. .openSession();
  37. // 开始事务
  38. Transaction transaction = session.beginTransaction();
  39. // 保存班级
  40. session.save(grade);
  41. // 保存学生
  42. //session.save(stu1);
  43. //session.save(stu2);
  44. // 提交事务
  45. transaction.commit();
  46. // 关闭session
  47. session.close();
  48. }
  49. }

反之,在学生类的配置文件one-many中添加cascade属性设置为save-update

  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.  
  5. <hibernate-mapping>
  6. <class name="entity.Student" table="STUDENT" schema="ROOT">
  7. <id name="sid" type="java.lang.Integer">
  8. <column name="SID" precision="22" scale="0" />
  9. <generator class="assigned" />
  10. </id>
  11. <property name="sname" type="java.lang.String">
  12. <column name="SNAME" length="20" />
  13. </property>
  14. <property name="sex" type="java.lang.String">
  15. <column name="SEX" length="20" />
  16. </property>
  17. <!--配置grade属性 -->
  18. <many-to-one name="grade" class="entity.Grade" cascade="save-update">
  19. <!--指定学生表中的外键 -->
  20. <column name="GID" />
  21. </many-to-one>
  22. </class>
  23. </hibernate-mapping>
  1. package Test;
  2. import org.hibernate.Session;
  3. import org.hibernate.Transaction;
  4. import org.hibernate.cfg.Configuration;
  5. import entity.Grade;
  6. import entity.Student;
  7. public class Demo3 {
  8. /**
  9. * @param args
  10. */
  11. public static void main(String[] args) {
  12. save();
  13. }
  14. public static void save() {
  15. // 声明班级对象,并赋值
  16. Grade grade = new Grade();
  17. grade.setGid(201504);
  18. grade.setGname("Java一班");
  19. grade.setGdesc("刚开始学习JAVA");
  20. // 声明2个学生对象
  21. Student stu1 = new Student();
  22. stu1.setSid(201504012);
  23. stu1.setSname("张三");
  24. stu1.setSex("男");
  25. stu1.setGrade(grade);
  26. Student stu2 = new Student();
  27. stu2.setSid(201504013);
  28. stu2.setSname("李四");
  29. stu2.setSex("女");
  30. stu2.setGrade(grade);
  31. // 将学生添加到班级
  32. grade.getStudents().add(stu1);
  33. grade.getStudents().add(stu2);
  34. // 建立session
  35. Session session = new Configuration().configure().buildSessionFactory()
  36. .openSession();
  37. // 开始事务
  38. Transaction transaction = session.beginTransaction();
  39. // 保存班级
  40. //session.save(grade);
  41. // 保存学生
  42. session.save(stu1);
  43. session.save(stu2);
  44. // 提交事务
  45. transaction.commit();
  46. // 关闭session
  47. session.close();
  48. }
  49. }
View Code

 

3.2、inverse属性

 

首先在班级类中设置invers属性为false时,删除班级

  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.  
  5. <hibernate-mapping>
  6. <class name="entity.Grade" table="GRADE" schema="ROOT">
  7. <id name="gid" type="java.lang.Integer">
  8. <column name="GID" precision="22" scale="0" />
  9. <generator class="assigned" />
  10. </id>
  11. <property name="gname" type="java.lang.String">
  12. <column name="GNAME" length="50" />
  13. </property>
  14. <property name="gdesc" type="java.lang.String">
  15. <column name="GDESC" length="50" />
  16. </property>
  17. <!--建立set属性,也可以建立list和持久化类中一致就行 -->
  18. <set name="students" cascade="save-update" inverse="false">
  19. <key>
  20. <!--这里的列是指学生表中的班级编号 -->
  21. <column name="GID" precision="22" scale="0" />
  22. </key>
  23. <!-- 通过class属性指定set的属性 -->
  24. <one-to-many class="entity.Student" />
  25. </set>
  26. </class>
  27. </hibernate-mapping>
View Code

测试类

  1. package Test;
  2. import org.hibernate.Session;
  3. import org.hibernate.Transaction;
  4. import org.hibernate.cfg.Configuration;
  5. import entity.Grade;
  6. import entity.Student;
  7. public class Demo4 {
  8. /**
  9. * @param args
  10. */
  11. public static void main(String[] args) {
  12. delete() ;
  13. }
  14. public static void delete() {
  15. // 建立session
  16. Session session = new Configuration().configure().buildSessionFactory()
  17. .openSession();
  18. // 开始事务
  19. Transaction transaction = session.beginTransaction();
  20. // 保存班级
  21. Grade grade=(Grade) session.get(Grade.class, 201504);
  22. // 保存学生
  23. session.delete(grade);
  24. // 提交事务
  25. transaction.commit();
  26. // 关闭session
  27. session.close();
  28. }
  29. }
View Code

结果:发现班级表中的班级已经删除,而学生表中数据没有删除,只是GID字段为NULL

下面将inverse设置为true时,添加新学生,和新的班级

  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.  
  5. <hibernate-mapping>
  6. <class name="entity.Grade" table="GRADE" schema="ROOT">
  7. <id name="gid" type="java.lang.Integer">
  8. <column name="GID" precision="22" scale="0" />
  9. <generator class="assigned" />
  10. </id>
  11. <property name="gname" type="java.lang.String">
  12. <column name="GNAME" length="50" />
  13. </property>
  14. <property name="gdesc" type="java.lang.String">
  15. <column name="GDESC" length="50" />
  16. </property>
  17. <!--建立set属性,也可以建立list和持久化类中一致就行 -->
  18. <set name="students" cascade="save-update" inverse="true">
  19. <key>
  20. <!--这里的列是指学生表中的班级编号 -->
  21. <column name="GID" precision="22" scale="0" />
  22. </key>
  23. <!-- 通过class属性指定set的属性 -->
  24. <one-to-many class="entity.Student" />
  25. </set>
  26. </class>
  27. </hibernate-mapping>
View Code

测试类

  1. package Test;
  2. import org.hibernate.Session;
  3. import org.hibernate.Transaction;
  4. import org.hibernate.cfg.Configuration;
  5. import entity.Grade;
  6. import entity.Student;
  7. public class Demo4 {
  8. /**
  9. * @param args
  10. */
  11. public static void main(String[] args) {
  12. delete() ;
  13. }
  14. public static void delete() {
  15. // 声明班级对象,并赋值
  16. Grade grade = new Grade();
  17. grade.setGid(201509);
  18. grade.setGname("Java三班");
  19. grade.setGdesc("ASP.NET");
  20. // 声明2个学生对象
  21. Student stu1 = new Student();
  22. stu1.setSid(201509009);
  23. stu1.setSname("王五");
  24. stu1.setSex("女");
  25. stu1.setGrade(grade);
  26. Student stu2 = new Student();
  27. stu2.setSid(201509045);
  28. stu2.setSname("赵六");
  29. stu2.setSex("女");
  30. stu2.setGrade(grade);
  31. // 建立session
  32. Session session = new Configuration().configure().buildSessionFactory()
  33. .openSession();
  34. // 开始事务
  35. Transaction transaction = session.beginTransaction();
  36. // 保存学生
  37. session.save(stu1);
  38. session.save(stu2);
  39. // 提交事务
  40. transaction.commit();
  41. // 关闭session
  42. session.close();
  43. }
  44. }
View Code

结果发现,我并没有用班级添加学生,也没有保存班级,只是保存了学生,班级信息一起保存了 


还没有评论.