packagecn.itcast.g_hbm_manyToMany;importorg.hibernate.Session;importorg.hibernate.SessionFactory;importorg.hibernate.cfg.Configuration;importorg.junit.Test;importcom.java1234.util.HibernateSessionFactory;public classApp {private static SessionFactory sessionFactory =HibernateSessionFactory.getSessionFactory();//保存,有关联关系
@Testpublic void testSave() throwsException {
Session session=sessionFactory.openSession();
session.beginTransaction();//--------------------------------------------//新建对象
Student student1 = newStudent();
student1.setName("王同学1");
Student student2= newStudent();
student2.setName("李同学2");
Teacher teacher1= newTeacher();
teacher1.setName("赵老师3");
Teacher teacher2= newTeacher();
teacher2.setName("蔡老师4");//关联起来
student1.getTeachers().add(teacher1);
student1.getTeachers().add(teacher2);
student2.getTeachers().add(teacher1);
student2.getTeachers().add(teacher2);
teacher1.getStudents().add(student1);
teacher1.getStudents().add(student2);
teacher2.getStudents().add(student1);
teacher2.getStudents().add(student2);//保存
session.save(student1);
session.save(student2);
session.save(teacher1);
session.save(teacher2);//--------------------------------------------
session.getTransaction().commit();
session.close();
}//获取,可以获取到关联的对方
@Testpublic void testGet() throwsException {
Session session=sessionFactory.openSession();
session.beginTransaction();//--------------------------------------------//获取一方,并显示另一方信息
Teacher teacher = (Teacher) session.get(Teacher.class, 3L);
System.out.println(teacher);
System.out.println(teacher.getStudents());//--------------------------------------------
session.getTransaction().commit();
session.close();
}//解除关联关系
@Testpublic void testRemoveRelation() throwsException {
Session session=sessionFactory.openSession();
session.beginTransaction();//--------------------------------------------//如果inverse=false就可以解除,如果为true就不可以解除
Teacher teacher = (Teacher) session.get(Teacher.class, 3L);
teacher.getStudents().clear();//--------------------------------------------
session.getTransaction().commit();
session.close();
}//删除对象,对关联对象的影响
@Testpublic void testDelete() throwsException {
Session session=sessionFactory.openSession();
session.beginTransaction();//--------------------------------------------//a, 如果没有关联的对方:能删除。//b, 如果有关联的对方且inverse=false,由于可以维护关联关系,他就会先删除关联关系,再删除自己。//c, 如果有关联的对方且inverse=true,由于不能维护关联关系,所以会直接执行删除自己,就会有异常。
Teacher teacher = (Teacher) session.get(Teacher.class, 9L);
session.delete(teacher);//--------------------------------------------
session.getTransaction().commit();
session.close();
}
}