hibernate学习笔记(多对多关联关系)

多对多关联关系:本质上就是两个一对多的关系,

例如:一个学生可以选择多门课程。一门课程可以被很多学生选择。

体现在代码中如下;学生类:

private String id;//学生id private String name;//学生姓名 private Set<Course> course;//学生选择的课程集合 public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set<Course> getCourse() { return course; } public void setCourse(Set<Course> course) { this.course = course; }课程类:

private String id;//课程id private String name;//课程名称 private Set<Student> student;//学生集合 public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set<Student> getStudent() { return student; } public void setStudent(Set<Student> student) { this.student = student; }关键就是两个映射文件了。

student.hbm.xml映射文件

<class name="com.test.bean1.Student" table="student"> <id name="id" column="id" type="string"> <generator class="uuid"/> </id> <property name="name" column="name" type="string"/> <set name="course" table="student_course" cascade="save-update" > <key column="student_id"/><!-- 这个student_id是中间关联表的id,根据这个id可以关联到student表 --> <!-- class:表示关联的类型。column:表示根据course_id可以关联到course表 --> <many-to-many class="com.test.bean1.Course" column="course_id" /> </set> </class>course.hbm.xml映射文件;

<class name="com.test.bean1.Course" table="course"> <id name="id" column="id" type="string"> <generator class="uuid"/> </id> <property name="name" column="name" type="string"/> <!-- 这里的配置和上面的一样,有一点就是inverse为true;表示对方维护这种关联关系。为false:表示主动方;由主动方维护这种关联关系 --> <set name="student" table="student_course" cascade="save-update" inverse="true" > <key column="course_id"/> <many-to-many class="com.test.bean1.Student" column="student_id" /> </set> </class>最后来个测试吧:

Session session=sessionfactory.openSession(); Transaction tx=null; // Student student=new Student(); // student.setName("zhangsan"); // student.setCourse(new HashSet<Course>()); // // Course course=new Course(); // course.setName("英语"); // course.setStudent(new HashSet<Student>()); // //添加记录 // student.getCourse().add(course); // course.getStudent().add(student); // try { tx=session.beginTransaction(); //查询到张三学生。没用延迟加载。所以把对应的课程表的信息也查出来了。 Student student=(Student)session.get(Student.class, "4028ab81385bdd9b01385bdd9d030001"); //查询到数学这门课程 // Course course=(Course)session.get(Course.class, "4028ab81385be0c001385be0c2db0002"); //删除信息 // student.getCourse().remove(course); //已经查询到了张三的信息。和数学课程的信息。所以可以讲数学这门课程让张三选中 // student.getCourse().add(course); // course.getStudent().add(student); //遍历张三学生的所选课程 Set<Course> course=student.getCourse(); for(Iterator<Course> iter=course.iterator();iter.hasNext();){ System.out.println(iter.next().getName()); } tx.commit(); } catch (Exception e) { if(null!=tx) tx.rollback(); e.printStackTrace(); }finally{ session.close(); }省略了获取session的代码了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值