多对多关联关系:本质上就是两个一对多的关系,
例如:一个学生可以选择多门课程。一门课程可以被很多学生选择。
体现在代码中如下;学生类:
- <span style="white-space: pre;"> </span>private String 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;
- }
课程类:
- <span style="white-space: pre;"> </span>private String 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映射文件
- <span style="white-space: pre;"> </span><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;
-
-
-
-
-
-
-
-
-
-
-
- try {
- tx=session.beginTransaction();
-
- Student student=(Student)session.get(Student.class, "4028ab81385bdd9b01385bdd9d030001");
-
-
-
-
-
-
-
-
-
-
- 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的代码了。
分享到:
相关推荐
这里包含了hibernate多对一单向关联关系实现源码,希望对你有用。
NULL 博文链接:https://dreamzhong.iteye.com/blog/1200915
hibernate实现多对多关联关系源码
Hibernate映射一对多关联关系
NULL 博文链接:https://dreamzhong.iteye.com/blog/1200387
多对多双向关联 <br>注意映射规则: <set name="roles" table="t_user_role"><br> <key column="userid"/><br> <many-to-many class="com.bjsxt.hibernate.Role" column="roleid"/><br> </set><br><br>table...
NULL 博文链接:https://dreamzhong.iteye.com/blog/1201615
hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,hibernate,包含4个说明文档,分别详细解说了hibernate关联映射的关联关系,...
Hibernate多对多关联关系demo
hibernate one-to-one 一对一唯一外键关联映射_单向 and 双向
如果在”一“一端维护一对多关联关系,hibernate会发出多余的udpate语句,所以我们一般在多的一端来维护关联关系。 加上inverse="true"这个属性,就可以强制在多的一端维护关系了。
hibernate外键实现一对一双向关联关系源码
Hibernate关联关系映射 单向关联 │ ├─ 一对一外键单向关联 │ ├─ 一对一主键单向关联 │ ├─ 一对一连接表单向关联 │ ├─ 一对多外键单向关联 │ ├─ 一对多连接表单向关联 │ ├─ 多对一外键单向关联 │ ...
hibernate主键实现一对一单向关联关系源码
NULL 博文链接:https://dreamzhong.iteye.com/blog/1199508
Hibernate案例与专题-关联关系。详细介绍了Hibernate关联关系。
NULL 博文链接:https://dreamzhong.iteye.com/blog/1200430
hibernate外键实现一对一单向关联关系源码
Hibernate4中映射关系图解。
有关hibernate中保存多对一关联关系的进一步分析,很详细的介绍了多对一关系