!在多的一方的类中添加一的一方的成员变量!
2. 修改Student.hbm.xml文件:
<?
xml
version= "1.0" encoding ="utf-8"?>
<!
DOCTYPE
hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<
hibernate-mapping
>
<
class
name="cn.itheima03.hibernate.domain.Student">
<id name= "sid" length ="5">
<generator class= "increment"></generator >
</id>
<property name= "sname" length ="20"></ property>
<property name= "description" length="50" ></property>
<!--
column 外键
是在客户端通过Student来关联Classes
在这里没有inverse属性
如果用student来维护关系,没有必要维护外键,外键就在student这张表中
一对多,多的一方维护关系效率比较高
-->
<many-to-one name= "classes" column ="cid" class="cn.itheima03.hibernate.domain.Classes" cascade="save-update" >
</many-to-one>
</
class
>
</
hibernate-mapping
>
|
3.DAO
/**
* 一对多的单项关联
*
@author Think
* 相关的操作:
* 1、保存班级
* 2、保存学生
* 3、保存班级同时保存学生
* 4、有一个新的学生,加入到一个班级
* 5、已经存在一个学生,新建一个班级,把该学生加入到新的班级
* 6、已经存在一个学生,已经存在一个班级,解除该学生和班级之间的关系
* 7、解析一些学生和一个班级之间的关系
* 8、解除该班级和所有的学生之间的关系
* 9、一个学生从一个班级转移到另外一个班级
* 10、删除一个学生
* 11、删除班级
* 1、先解除关系,再删除班级
* 2、在删除班级的同时删除学生
*/
public
class OneToManyDualTest extends HibernateUtils{
/**
* 1.保存班级
*/
@Test
public
void testSaveClasses(){
Session session =
sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Classes classes =
new Classes();
classes.setCname(
"云三");
classes.setDescription(
"云里的三、挺好" );
session.save(classes);
transaction.commit();
session.close();
}
/**
* 3.保存班级同时保存学生
* 从学生角度出发
* <many-to-one name="classes" column=" cid"
* class="cn.itheima03.hibernate.domain.Classes" cascade="save
-
update">
*/
@Test
public
void test3(){
Session session =
sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Student student=
new Student();
student.setSname(
"李四");
student.setDescription(
"李四网达到" );
Classes classes=
new Classes();
classes.setCname(
"勤务班");
classes.setDescription(
"贡菜勤务就由他们来干啦" );
student.setClasses(classes);
//联动保存class;
session.save(student);
transaction.commit();
session.close();
}
/**
* 4、有一个新的学生,加入到一个班级
*/
@Test
public
void test4(){
Session session =
sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Student student=
new Student();
student.setSname(
"小将");
student.setDescription(
"小将是个灵活的小伙子" );
Classes classes = (Classes) session.get(Classes.
class
, 6L);
student.setClasses(classes);
session.save(student);
transaction.commit();
session.close();
}
/**
* 5、已经存在一个学生,新建一个班级,把该学生加入到新的班级
*/
@Test
public
void test5(){
Session session =
sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Student student = (Student) session.get(Student.
class
, 4L);
Classes classes=
new Classes();
classes.setCname(
"警卫班");
classes.setDescription(
"守护神");
student.setClasses(classes);
transaction.commit();
session.close();
}
/**
* 6、已经存在一个学生,已经存在一个班级,解除该学生和班级之间的关系
*/
@Test
public
void test6(){
Session session =
sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Student student = (Student) session.get(Student.
class
, 4L);
student.setClasses(
null);
transaction.commit();
session.close();
}
/**
* 7、解析一些学生和一个班级之间的关系
*/
@Test
public
void test7(){
Session session =
sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Student student1 = (Student) session.get(Student.
class
, 2L);
Student student2 = (Student) session.get(Student.
class
, 3L);
student1.setClasses(
null);
student2.setClasses(
null);
transaction.commit();
session.close();
}
/**
* 8、解除该班级和所有的学生之间的关系
*/
@Test
public
void test8(){
Session session =
sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Classes classes=(Classes) session.get(Classes.
class
, 6L);
classes.setStudents(
null);
transaction.commit();
session.close();
}
/**
* 9、一个学生从一个班级转移到另外一个班级
*/
@Test
public
void test9(){
Session session =
sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Classes classes=(Classes) session.get(Classes.
class
, 7L);
Student student = (Student) session.get(Student.
class
, 2L);
student.setClasses(classes);
transaction.commit();
session.close();
}
/**
* 10、删除一个学生
*/
@Test
public
void test10(){
Session session =
sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Student student = (Student) session.get(Student.
class
, 2L);
session.delete(student);
transaction.commit();
session.close();
}
/**
* 先解除关系,再删除班级
*/
@Test
public
void test11(){
Session session =
sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Classes classes=(Classes) session.get(Classes.
class
, 5L);
classes.setStudents(
null);
session.delete(classes);
transaction.commit();
session.close();
}
/**
* 在删除班级的同时删除学生
* 级联删除!
* <many-to-one name="classes" column=" cid"
* class="cn.itheima03.hibernate.domain.Classes" cascade="all">
*/
@Test
public
void test12(){
Session session =
sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Classes classes=(Classes) session.get(Classes.
class
, 9L);
Set<Student> students = classes.getStudents();
for (Student student : students) {
session.delete(student);
}
transaction.commit();
session.close();
}
/**
* 在删除班级的同时删除学生
*
<many- to-one name="classes" column=" cid"
* class="cn.itheima03.hibernate.domain.Classes" cascade="save
-
update">
*/
@Test
public
void test12_2(){
Session session =
sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
Classes classes=(Classes) session.get(Classes.
class
, 8L);
Set<Student> students = classes.getStudents();
//解除关系
classes.setStudents(
null);
for (Student student : students) {
session.delete(student);
}
session.delete(classes);
transaction.commit();
session.close();
}
}
|