一个学生可以选修多门课程,一个课程可以有多个学生选修,学生和课程的关系是多对多,下面写一个多对多的例子。
建表Student,id ,stuName,course_id
建表Course,id ,couName,student_id
然后设置外键关系,对了,student表的course_id要设置成可以为空,course表的student_id也是
实体类创建略,实体类映射:
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">
<hibernate-mapping>
<class name="com.csdn.model.Student" table="Student">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="stuName"/>
<set name="courses" cascade="save-update" lazy="false" inverse="false">
<key column="course_id"></key>
<many-to-many class="com.csdn.model.Course" column="id"/>
</set>
</class>
</hibernate-mapping>
Course.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">
<hibernate-mapping>
<class name="com.model.csdn.Course" table="Course">
<id name="id" column="id">
<generator class="native"/>
</id>
<property name="couName"/>
<set name="students" cascade="save-update" lazy="false" inverse="true">
<key column="student_id"/>
<many-to-many class="com.csdn.model.Student" column="id"/>
</set>
</class>
</hibernate-mapping>
Test类:
package com.csdn.test;
import java.util.HashSet;
import java.util.Set;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;
import com.csdn.model.Course;
import com.csdn.model.Student;
public class Test {
public static void main(String[] args) {
Configuration cfg=new Configuration();
SessionFactory sf = cfg.configure().buildSessionFactory();
Session session=sf.openSession();
Transaction tx=null;
tx=session.beginTransaction();
Set<Student> students=new HashSet<Student>();
for(int i=0;i<10;i++){
Student stu=new Student();
stu.setStuName("chenweiwei"+i);
session.save(stu);
students.add(stu);
}
for(int i=0;i<10;i++){
Course cou=new Course();
cou.setCouName("english"+i);
session.save(cou);
cou.setStudents(students);
}
tx.commit();
}
}
保存成功!