1.使用联合主键@Embedded
a.实现Serializable接口
student:
id
name
course://student和course是ManyToMany
id
name
score:(同时是student和course连接表)
//studentid和courseid不能使用自动生成
studentid//先存student,然后把id拿出来放到score表里
courseid//先存course,然后把id拿出来放到score表里
score
2.不使用联合主键(较方便)
student://和score是OneToMany
id
name
course://和score是OneToMany
id
name
score:
id
studentid
courseid
score
@Entity
public class Student
{
private int id;
private String name;
@ManyToMany
@JoinTable(name="score",
joinColumns=@JoinColumn(name="student_id"),
inverseJoinColumns=@JoinColumn(name="course_id")
)
private Set<Course> courses = new HashSet<Course>();
//hibernate会以此为根据建表
//会将student_id和course_id设置为联合主键
//此案例中score表手动创建
}
@Entity
public class Course
{
private int id;
private String name;
}
@Entity
@Table(name="score")
public class Score
{
@Id
@GeneratedValue
private int id;
private int score;
@ManyToOne
@JoinColumn(name="student_id")
private Student student;
@ManyToOne
@JoinColumn(name="course_id")
private Course course;
}
public void testSave(){
Student s = new Student();
s.setName("zs");
Course c = new Course();
c.setName("java");
Score score = new Score();
score.setCourse(c);
score.setStudent(s);
Session session = sessionFactory.openSession();
session.beginTransaction();
session.save(s);
session.save(c);
session.save(score);
session.getTransaction().commit();
session.close();
}
public void testLoad(){
testSave();
Session session = sessionFactory.openSession();
session.beginTransaction();
Student s = (Student)session.load(Student.class,1);
for(Course c:s.getCourses()){
System.out.println(c.getName());
}
session.getTransaction().commit();
session.close();
}
16hibernate hibernate学生、课程、分数设计案例
最新推荐文章于 2018-02-28 09:58:00 发布