hibernate多对多

来源:互联网 发布:淘宝主播的东西可靠吗 编辑:程序博客网 时间:2024/04/30 08:45
Student.java:


package doublemany2many;


import java.util.HashSet;
import java.util.Set;


public class Student implements java.io.Serializable {
/**

*/
private static final long serialVersionUID = 1L;
private int sid;
private String sname;
private Set<Teacher> teachers = new HashSet<Teacher>();


public Set<Teacher> getTeachers() {
return teachers;
}
public void setTeachers(Set<Teacher> teachers) {
this.teachers = teachers;
}
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}

}
-------------------------------------------------------------------------------
Teacher.java:


package doublemany2many;


import java.util.HashSet;
import java.util.Set;


import javax.persistence.Id;


import org.hibernate.annotations.Entity;


public class Teacher implements java.io.Serializable  {
/**

*/
private static final long serialVersionUID = 1L;
private int tid;
private String tname;

//一的一方写集合
private Set<Student> students = new HashSet<Student>();


public int getTid() {
return tid;
}


public void setTid(int tid) {
this.tid = tid;
}


public String getTname() {
return tname;
}


public void setTname(String tname) {
this.tname = tname;
}


public Set<Student> getStudents() {
return students;
}


public void setStudents(Set<Student> students) {
this.students = students;
}

}
---------------------------------------------------------------------------------------


Student.hbm.xml:


<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="doublemany2many.Student" schema="NEIL">
        <id name="sid" type="java.lang.Integer">         
            <generator class="assigned" />
        </id>
        <property name="sname" type="java.lang.String"/>
        <!--  加入第三方表的关联table="st",此表只要两个表的主键 -->      
       <set name="teachers" table="st"  cascade="all" fetch="join">
        <!-- key是主键,one-to-many外键的一方 -->
        <key column="sid"/>
        <many-to-many column="tid"  class="doublemany2many.Teacher"/>
       </set>
    </class>
</hibernate-mapping>
------------------------------------------------------------------------------------------
Teacher.hbm.xml:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="doublemany2many.Teacher" schema="NEIL">
       <id name="tid">
        <generator class="assigned"></generator>
       </id>
       <property name="tname"/>
       <!--  加入第三方表的关联table="st",此表只要两个表的主键 -->      
       <set name="students" table="st" cascade="all" inverse="true">
        <!-- key是主键,one-to-many外键的一方 -->
        <key column="tid"/>
        <many-to-many column="sid"  class="doublemany2many.Student"/>
       </set>
       
    </class>
</hibernate-mapping>
---------------------------------------------------------------------------------------------
Test.java:


package doublemany2many;


import java.util.Iterator;
import java.util.List;
import java.util.Set;


import org.hibernate.Query;
import org.hibernate.Session;


public class Test {
public static void main(String[] args) {
Session session = HibernateSessionFactory.getSession();
// //添加三个学生,三个老师
// Student s1 = new Student();
// s1.setSid(1);
// s1.setSname("s1");
//
// Student s2 = new Student();
// s2.setSid(2);
// s2.setSname("s2");
//
// Student s3 = new Student();
// s3.setSid(3);
// s3.setSname("s3");
//
// Teacher t1 = new Teacher();
// t1.setTid(101);
// t1.setTname("t1");
// t1.getStudents().add(s1);//Set s  = new HashSet();
// t1.getStudents().add(s2);
// t1.getStudents().add(s3);
//
// Teacher t2 = new Teacher();
// t2.setTid(102);
// t2.setTname("t2");
// t2.getStudents().add(s1);//Set s  = new HashSet();
// t2.getStudents().add(s2);
// t2.getStudents().add(s3);
//
// Teacher t3 = new Teacher();
// t3.setTid(103);
// t3.setTname("t3");
// t3.getStudents().add(s1);//Set s  = new HashSet();
// t3.getStudents().add(s2);
// t3.getStudents().add(s3);
//
// s1.getTeachers().add(t1);
// s1.getTeachers().add(t2);
// s1.getTeachers().add(t3);
//
// s2.getTeachers().add(t1);
// s2.getTeachers().add(t2);
// s2.getTeachers().add(t3);
//
// s3.getTeachers().add(t1);
// s3.getTeachers().add(t2);
// s3.getTeachers().add(t3);
//
// //添加学生
// session.save(s1);//测试多关联一,成功
// session.save(s2);//测试多关联一,成功
// session.save(s3);//测试多关联一,成功
// session.beginTransaction().commit();



//查询
//测试查询一的一方
Query query = session.createQuery("from doublemany2many.Teacher");
List<Teacher> teachers = query.list();
for(Teacher t:teachers){
System.out.print("老师"+t.getTname()+"交的学生是:\t");
//Set<Student> students = t.getStudents();
Iterator<Student> students = t.getStudents().iterator();
while(students.hasNext()){
Student student = students.next();
System.out.println("学生:"+student.getSname());
}
}
// Teacher t = (Teacher)session.load(Teacher.class, 101);
// System.out.println(t.getTname());
// Set<Student> students = t.getStudents();
// Iterator<Student> iterator = students.iterator();
// while(iterator.hasNext()){
// Student student = iterator.next();
// System.out.println(student.getSname());
// }
}
}



0 0