`

Hibernate学生-课程-成绩表的例子(many2many)

 
阅读更多

Course.java(课程表)

package com.test.hiberenate.model;

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

}

 

Student.java(学生表)

package com.test.hiberenate.model;

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"), inverseJoinColumns = @JoinColumn(name = "course_id"))
	public Set<Course> getCourses() {
		return courses;
	}

	public void setCourses(Set<Course> courses) {
		this.courses = courses;
	}

}

 

Score.java(中间表:成绩表)

package com.test.hiberenate.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

@Entity
public class Score {
	private int id;
	private int score;
	private Student student;
	private Course course;

	@Id
	@GeneratedValue
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public int getScore() {
		return score;
	}

	public void setScore(int score) {
		this.score = score;
	}

	@ManyToOne
	@JoinColumn(name = "student_id")
	public Student getStudent() {
		return student;
	}

	public void setStudent(Student student) {
		this.student = student;
	}

	@ManyToOne
	@JoinColumn(name = "course_id")
	public Course getCourse() {
		return course;
	}

	public void setCourse(Course course) {
		this.course = course;
	}

}

 

HibernateTest.java(测试类)

package com.test.hibernate.model;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

import com.test.hiberenate.model.Course;
import com.test.hiberenate.model.Score;
import com.test.hiberenate.model.Student;

public class HibernateTest {
	private static SessionFactory sf = null;

	@BeforeClass
	public static void beforeClass() {
		// new SchemaExport(new Configuration().configure()).create(false, true);
		try {
			if (sf == null) {
				sf = new Configuration().configure().buildSessionFactory();
			}
		} catch (HibernateException e) {
			e.printStackTrace();
		}
	}

	@AfterClass
	public static void afterClass() {
		sf.close();
	}

	@Test
	public void testSave() {
		Student s = new Student();
		s.setName("张三");
		Course c = new Course();
		c.setName("计算机");
		Score score = new Score();
		score.setScore(90);
		score.setStudent(s);
		score.setCourse(c);

		Session session = sf.openSession();
		session.beginTransaction();
		session.save(s);
		session.save(c);
		session.save(score);
		session.getTransaction().commit();
		session.close();
	}

	@Test
	public void testLoad() {
		testSave();
		Session session = sf.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();
	}

	public static void main(String[] args) {
		beforeClass();
	}

}

 

注:这里自动生成的中间表(成绩表)的主键为:course_idstudent_id的联合主键,需要手动进行调整主键为中间表的id

分享到:
评论

相关推荐

    Java面试宝典-经典

    27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 112 28、这段代码有什么不足之处? 112 29、说出数据连接池的工作机制是什么? 113 30、为什么要用 ORM? 和 JDBC 有何不一样? 113 六. XML部分 113 1...

    最新Java面试宝典pdf版

    27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 112 28、这段代码有什么不足之处? 112 29、说出数据连接池的工作机制是什么? 113 30、为什么要用 ORM? 和 JDBC 有何不一样? 113 六. XML部分 113 1...

    Java面试宝典2010版

    27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 28、这段代码有什么不足之处? 29、说出数据连接池的工作机制是什么? 30、为什么要用 ORM? 和 JDBC 有何不一样? 六. XML部分 1、xml有哪些解析...

    Java面试笔试资料大全

    27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 112 28、这段代码有什么不足之处? 112 29、说出数据连接池的工作机制是什么? 113 30、为什么要用 ORM? 和 JDBC 有何不一样? 113 六. XML部分 113 1...

    JAVA面试宝典2010

    27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 112 28、这段代码有什么不足之处? 112 29、说出数据连接池的工作机制是什么? 113 30、为什么要用 ORM? 和 JDBC 有何不一样? 113 六. XML部分 113 1...

    java面试题大全(2012版)

    27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 112 28、这段代码有什么不足之处? 112 29、说出数据连接池的工作机制是什么? 113 30、为什么要用 ORM? 和 JDBC 有何不一样? 113 六. XML部分 113 1...

    Java面试宝典2012版

    27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 112 28、这段代码有什么不足之处? 112 29、说出数据连接池的工作机制是什么? 113 30、为什么要用 ORM? 和 JDBC 有何不一样? 113 六. XML部分 ...

    java面试宝典2012

    27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 122 28、这段代码有什么不足之处? 123 29、说出数据连接池的工作机制是什么? 123 30、为什么要用 ORM? 和 JDBC 有何不一样? 123 六. XML部分 124 1...

    Java面试宝典2012新版

    27、用 JDBC 查询学生成绩单, 把主要代码写出来(考试概率极大). 112 28、这段代码有什么不足之处? 112 29、说出数据连接池的工作机制是什么? 113 30、为什么要用 ORM? 和 JDBC 有何不一样? 113 六. XML部分 113 1...

    Java 面试宝典

    2、Java 有没有 goto? ....................................................................................................... 8 3、说说&和&&的区别。 ......................................................

Global site tag (gtag.js) - Google Analytics