数据库映射类的定义:import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;@Entity
@Table(name="score")
public class Score {
private int id;
private float score;
private Course course;
private Student student;
public float getScore() {
return score;
}
public void setScore(float score) {
this.score = score;
}
@ManyToOne
@JoinColumn(name="course_id")
public Course getCourse() {
return course;
}
public void setCourse(Course course) {
this.course = course;
}
@ManyToOne
@JoinColumn(name="student_id")
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
public void setId(int id) {
this.id = id;
}
@Id
@GeneratedValue
public int getId() {
return id;
}
}
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;@Entity
public class Course {
private int id;
private String name;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

}
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;@Entity
public class Student {
private int id;
private String name;
private Set<Course> courses = new HashSet<Course>();
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@ManyToMany
@JoinTable(name="score",
joinColumns=@JoinColumn(name="student_id",referencedColumnName="id"),
inverseJoinColumns=@JoinColumn(name="course_id",referencedColumnName="id"))
public Set<Course> getCourses() {
return courses;
}
public void setCourses(Set<Course> courses) {
this.courses = courses;
}

}测试单元代码:import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;public class TestUnit {
private static SessionFactory sf = null;
@BeforeClass
public static void getSf() {
//new SchemaExport(new AnnotationConfiguration().configure()).create(true, true);
sf = new AnnotationConfiguration().configure().buildSessionFactory();
}
@AfterClass
public static void closeSf() {
if(sf != null) {
sf.close();
sf = null;
}
}
public void doSave() {
Student stu = new Student();
stu.setName("hi");
Course cou = new Course();
cou.setName("yuwen");
stu.getCourses().add(cou);
Score sco = new Score();
sco.setCourse(cou);
sco.setStudent(stu);
Session s = sf.getCurrentSession();
s.beginTransaction();
s.save(stu);
s.save(cou);
s.save(sco);
s.getTransaction().commit();
}
@Test
public void doGet() {
doSave();
}
}Hibernate执行了两次insert语句插入score这张表
Hibernate: 
    insert 
    into
        Student
        (name) 
    values
        (?)
Hibernate: 
    insert 
    into
        Course
        (name) 
    values
        (?)
Hibernate: 
    insert 
    into
        score
        (score, course_id, student_id) 
    values
        (?, ?, ?)
Hibernate: 
    insert 
    into
        score
        (student_id, course_id) 
    values
        (?, ?)