Session s = null;
        Transaction t = null;
        try{
         s = HibernateSessionFactory.currentSession();
         t = s.beginTransaction();
        
         Student student1 = new Student();
         student1.setName("添加student1");
         Teacher teacher1 = new Teacher();
         teacher1.setName("添加teacher1");
         Student student2 = new Student();
         student2.setName("添加student2");
         Teacher teacher2 = new Teacher();
         teacher2.setName("添加teacher2");
         Student student3 = new Student();
         student3.setName("添加student3");
         Teacher teacher3 = new Teacher();
         teacher3.setName("添加teacher3");
               
           student1.getTeachers().add(teacher1);
           student1.getTeachers().add(teacher2);
           student2.getTeachers().add(teacher2);
           student2.getTeachers().add(teacher3);
           student3.getTeachers().add(teacher1);
           student3.getTeachers().add(teacher3);
           teacher1.getStudents().add(student1);
           teacher1.getStudents().add(student3);
           teacher2.getStudents().add(student1);
           teacher2.getStudents().add(student2);
           teacher3.getStudents().add(student2);
           teacher1.getStudents().add(student1);
        
         s.save(student1);
         s.save(student2);
         s.save(student3);
         s.save(teacher1);
         s.save(teacher2);
         s.save(teacher3);
         t.commit();
         s.flush();问题:我在student和teacher表中都是正确的插入一条记录,而在student_teacher表中却插入了相同的两条记录,小弟实在不解,请高手大哥些给小弟解答一下,谢咯

解决方案 »

  1.   

    Teacher.hbm.xml如下
    <?xml version="1.0" encoding='UTF-8'?>
    <!DOCTYPE hibernate-mapping PUBLIC
                                "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                                "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" ><!-- DO NOT EDIT: This is a generated file that is synchronized -->
    <!-- by MyEclipse Hibernate tool integration.                   -->
    <!-- Created Tue Jul 11 09:39:48 CST 2006                         -->
    <hibernate-mapping package="com.teacher">    <class name="Teacher" table="teacher">
            <id name="id" column="id" type="integer">
                <generator class="increment"/>
            </id>
     
            <property name="name" column="name" type="string" />
    <set name="students" table="student_teacher" cascade="save-update">
    <key column="teacher_id"/>
    <many-to-many class="com.student.Student" column="student_id"/>
    </set>
        </class>
        
    </hibernate-mapping>
    Student.hbm.xml如下:
    <?xml version="1.0" encoding='UTF-8'?>
    <!DOCTYPE hibernate-mapping PUBLIC
                                "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                                "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" ><!-- DO NOT EDIT: This is a generated file that is synchronized -->
    <!-- by MyEclipse Hibernate tool integration.                   -->
    <!-- Created Tue Jul 11 09:39:29 CST 2006                         -->
    <hibernate-mapping package="com.student">    <class name="Student" table="student">
            <id name="id" column="id" type="integer">
                <generator class="increment"/>
            </id>
     
            <property name="name" column="name" type="string" />
    <set name="teachers" table="student_teacher" cascade="save-update">
    <key column="student_id"/>
    <many-to-many class="com.teacher.Teacher" column="teacher_id"/>
    </set>
        </class>
        
    </hibernate-mapping>
      

  2.   

    student1.getTeachers().add(teacher1);
    student1.getTeachers().add(teacher2);
    student2.getTeachers().add(teacher2);
    student2.getTeachers().add(teacher3);
    student3.getTeachers().add(teacher1);
    student3.getTeachers().add(teacher3);
    teacher1.getStudents().add(student1);
    teacher1.getStudents().add(student3);
    teacher2.getStudents().add(student1);
    teacher2.getStudents().add(student2);
    teacher3.getStudents().add(student2);
    teacher1.getStudents().add(student1);这一块的最后一条语句teacher1.getStudents().add(student1);和student3.getTeachers().add(teacher3);后面的那条teacher1.getStudents().add(student1);重复了!最后一条语句应该改为teacher3.getStudents().add(student1);???
      

  3.   

    也许我写复杂了
    我只增加一个也是一样的,如下:
    Student student1 = new Student();
    student1.setName("aaa");
    Teacher teacher1 = new Teacher();
    teacher1.setName("bbb");student1.getTeachers().add(teacher1);
    teacher1.getStudents().add(student1);s.save(student1);
    s.save(teacher1);
    t.commit();但是结果,在student_teacher表中还是增加了2条一样的记录,请问大哥是怎么回事?
      

  4.   

    双向的关系  只要一方来维护这个中间表就可以了在你的  
    <set name="teachers" table="student_teacher" cascade="save-update"  inverse="true">加上inverse设置就可以了