hibernate多对多双向关联的实现实例



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

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

实现步骤:

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

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

在两个hbm文件中增加:

<set

name=”set属性名称”

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

lazy=”false”

inverse=”false”

>

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

<many-to-many

class=”另一表对应的类”

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

/>

</set>

代码实现:

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/>

</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/>

</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();//关闭

}

 

}