package cn.itcast.g_hbm_manyToMany; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.Test; /** * 应用程序操作类 * * @author 风清杨 * @version V3.0 * */ public class App { private static SessionFactory sessionFactory = new Configuration()// .configure()// .addClass(Student.class)// 添加Hibernate实体类(加载对应的映射文件) .addClass(Teacher.class)// 添加Hibernate实体类(加载对应的映射文件) .buildSessionFactory(); // 保存,有关联关系 @Test public void testSave() throws Exception { Session session = sessionFactory.openSession(); Transaction tx = null; try { tx = session.beginTransaction(); // ------------------------------------ // 构建老师对象 Teacher teachers1 = new Teacher(); teachers1.setName("张老师"); Teacher teachers2 = new Teacher(); teachers2.setName("赵老师"); // 构建学生对象 Student students1 = new Student(); students1.setName("王小明"); Student students2 = new Student(); students2.setName("李冰冰"); // 关联起来 students1.getTeachers().add(teachers1); students1.getTeachers().add(teachers2); students2.getTeachers().add(teachers2); teachers1.getStudents().add(students1); teachers2.getStudents().add(students1); teachers2.getStudents().add(students2); // 保存 session.save(students1); session.save(students2); session.save(teachers1); session.save(teachers2); // ------------------------------------ tx.commit(); } catch (RuntimeException e) { tx.rollback(); throw e; } finally { session.close(); } } // 获取,可以获取到关联的对方 @Test public void testGet() throws Exception { Session session = sessionFactory.openSession(); Transaction tx = null; try { tx = session.beginTransaction(); // ------------------------------------ // 获取一方数据,并显示另一方信息 Teacher teacher = (Teacher) session.get(Teacher.class, 2L); System.out.println(teacher); System.out.println(teacher.getStudents()); // ------------------------------------ tx.commit(); } catch (RuntimeException e) { tx.rollback(); throw e; } finally { session.close(); } } // 解除关联关系 @Test public void testRemoveRelation() throws Exception { Session session = sessionFactory.openSession(); Transaction tx = null; try { tx = session.beginTransaction(); // ------------------------------------ // 如果inverse=false就可以解除,如果为true就不可以解除 Teacher teacher = (Teacher) session.get(Teacher.class, 2L); teacher.getStudents().clear(); // ------------------------------------ tx.commit(); } catch (RuntimeException e) { tx.rollback(); throw e; } finally { session.close(); } } // 删除对象,对关联对象的影响 @Test public void testDelete() throws Exception { Session session = sessionFactory.openSession(); Transaction tx = null; try { tx = session.beginTransaction(); // ------------------------------------ // 删除部门方(一方) // a,如果没有关联的对方: // b,如果有关联的对方且inverse=false,由于可以维护关联关系,它就会先删除关联关系,再删除自已。 // c,如果有关联的对方且inverse=true,由于不能维护关联关系,所以会直接执行删除自已,就会有异常。 Teacher teacher = (Teacher) session.get(Teacher.class, 6L); session.delete(teacher); // ------------------------------------ tx.commit(); } catch (RuntimeException e) { tx.rollback(); throw e; } finally { session.close(); } } }