16hibernate hibernate学生、课程、分数设计案例

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();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值