Hibernate

xiaoxiao2021-02-28  52

package cn.itcast.g_hbm_manyToMany; import java.util.HashSet; import java.util.Set; /** * 学生 * * @author 风清杨 * @version V1.0 */ public class Student { private Long id; private String name; private Set teachers = new HashSet ();// 关联得老师位 public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set getTeachers() { return teachers; } public void setTeachers(Set teachers) { this.teachers = teachers; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + "]"; } } package cn.itcast.g_hbm_manyToMany; import java.util.HashSet; import java.util.Set; /** * 老师 * * @author 风清杨 * @version V1.0 */ public class Teacher { private Long id; private String name; private Set students = new HashSet ();// 关联的学生们 public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set getStudents() { return students; } public void setStudents(Set students) { this.students = students; } @Override public String toString() { return "Teacher [id=" + id + ", name=" + name + "]"; } } private static SessionFactory sessionFactory = new Configuration()// .configure()// .addClass(Student.class)// 添加Hibernate实体类(加载对应的映射文件) .addClass(Teacher.class)// 添加Hibernate实体类(加载对应的映射文件) .buildSessionFactory();

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(); } } }

转载请注明原文地址: https://www.6miu.com/read-75652.html

最新回复(0)