Hibernate学习16 -- 关联映射6 -- 多对多关联2 -- 多对多关联双向

本文介绍如何使用Hibernate框架实现课程与老师的多对多关联。通过创建中间表T_JIAOKE,设置Course和Teacher类中的集合属性,并在hbm.xml文件中定义关联关系,实现了查询任一方信息时能同时获取关联方数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

l         题目:课程和老师是多对多关系:T_COURSE(CID,CNAME)T_TEACHER(TID,TNAME)。要求利用hibernate,实现:对课程的信息进行查询的时候,无需另外查询就可以得到老师的信息,对老师信息查询的时候也能知道他教了哪些课程

l         首先建立第三个表:T_JIAOKE(TID,CID)

l         步骤:

n         建立POJO:Course.javaTeacher.java,建立hibernate的配置文件,将两个hbm文件与其绑定

n         Course.java里面建立一个Set类型的属性,准备装老师;在Teacher.java里面建立一个Set类型属性,准备装课程

n         在两个hbm文件中增加:

<set

name=”set属性名称

table=”第三个对应的表名称

lazy=”false”

inverse=”false”

   <key column=”本表在第三个对应表外键”/>

   <many-to-many

       class=”另一表对应的类

       column=”另一个在第三个表中对应的外键

   />

</set>

l         代码实现:

Course.java

package po;

 

import java.util.Set;

 

public class Course {

       private String cid;

       private String cname;

       private Set teachers;

       public Set getTeachers() {

              return teachers;

       }

       public void setTeachers(Set teachers) {

              this.teachers = teachers;

       }

       public String getCid() {

              return cid;

       }

       public void setCid(String cid) {

              this.cid = cid;

       }

       public String getCname() {

              return cname;

       }

       public void setCname(String cname) {

              this.cname = cname;

       }

 

}

Teacher.java

package po;

 

import java.util.Set;

 

public class Teacher {

       private String tid;

       private String tname;

       private Set courses;

       public String getTid() {

              return tid;

       }

       public void setTid(String tid) {

              this.tid = tid;

       }

       public String getTname() {

              return tname;

       }

       public void setTname(String tname) {

              this.tname = tname;

       }

       public Set getCourses() {

              return courses;

       }

       public void setCourses(Set courses) {

              this.courses = courses;

       }

}

Course.hbm.xml

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

       <class name="po.Course" table="T_COURSE"> 

              <id name="cid" column="CID">  

                     <generator class="assigned"/>                   

              </id>

              <property name="cname"      column="CNAME"/>

              <set

              name="teachers"

              table="T_JIAOKE"

              lazy="false"

              inverse="false"

              >

              <key column="CID" ></key>

              <many-to-many

                     class="po.Teacher"

                     column="TID"

              />   

              </set>           

       </class>

</hibernate-mapping>

Teacher.hbm.xml

<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC

    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

       <class name="po.Teacher" table="T_TEACHER">     

              <id name="tid" column="TID">   

                     <generator class="assigned"/>                   

              </id>

              <property name="tname"       column="TNAME"/>    

              <set

              name="courses"

              table="T_JIAOKE"

              lazy="false"

              inverse="false"

              >

              <key column="TID" ></key>

              <many-to-many

                     class="po.Course"

                     column="CID"

              />

</set>

                           

       </class>

      

</hibernate-mapping>

测试类:

package test;

import java.util.Iterator;

import java.util.Set;

 

import org.hibernate.Session;

 

import po.Course;

import po.Teacher;

 

 

public class TestMany2Many {

 

       public static void main(String[] args) {

              Session session = util.HibernateSessionFactory.getSession();

              //001老师教的课程

              Teacher teacher = (Teacher)session.get(Teacher.class, "001");

              System.out.println(teacher.getTname());

              Set set = teacher.getCourses();

              Iterator ite = set.iterator();

              while(ite.hasNext()){

                     Course course = (Course)ite.next();

                     System.out.println(course.getCname());

              }

              util.HibernateSessionFactory.closeSession();//关闭

             

             

       }

 

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值