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