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表中却插入了相同的两条记录,小弟实在不解,请高手大哥些给小弟解答一下,谢咯
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表中却插入了相同的两条记录,小弟实在不解,请高手大哥些给小弟解答一下,谢咯
<?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>
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);???
我只增加一个也是一样的,如下:
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条一样的记录,请问大哥是怎么回事?
<set name="teachers" table="student_teacher" cascade="save-update" inverse="true">加上inverse设置就可以了