hibernate3.3.2学习笔记--- 一个小实例
2016-10-02 12:05
393 查看
任务是这样的:
在数据库建三张表,第一张关于学生,第二张关于成绩,第三张关于课程。
一个学生有多项成绩,一个学生选多个课程。
一项成绩里有一个学生,一项成绩里有一门课程,还有一个成绩(int)。
一个课程可被多个学生选择。
Student.java
然而实际上,推荐这样写:
Course.java
@Entity
public class Course {
private String courseName;
private int id;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCourseName() {
return courseName;
}
public void setCourseName(String courseName) {
this.courseName = courseName;
}
}
Grade.java
@Entity public class Grade { private Course course; private Student stu; private int id; private int score; @GeneratedValue @Id public int getId() { return id; } @OneToOne(cascade=CascadeType.ALL) public Course getCourse() { return course; } public void setCourse(Course course) { this.course = course; } @OneToOne(cascade=CascadeType.ALL) public Student getStu() { return stu; } public void setStu(Student stu) { this.stu = stu; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } public void setId(int id) { this.id = id; } }Student.java
@Entity
public class Student {
private String name;
private int id;
@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;
}
}
测试类:
@Test
public void TestSave()
{
Session sess=sf.getCurrentSession();
sess.beginTransaction();
Student st=new Student();
Student st2=new Student();
Grade gr=new Grade();
Grade gr2=new Grade();
Grade gr3=new Grade();
Grade gr4=new Grade();
Course co=new Course();
Course co2=new Course();
st.setName("st1");
st2.setName("st2");
co.setCourseName("co1");
co2.setCourseName("co2");
co.setId(1);
co2.setId(2);
st.setId(1);
st2.setId(2);
gr.setCourse(co);
gr.setStu(st);
gr.setScore(90);
gr2.setCourse(co2);
gr2.setStu(st);
gr2.setScore(80);
gr3.setCourse(co);
gr3.setStu(st2);
gr3.setScore(70);
gr4.setCourse(co2);
gr4.setStu(st2);
gr4.setScore(60);
sess.save(st);
sess.save(st2);
sess.save(co);
sess.save(co2);
sess.save(gr);
sess.save(gr2);
sess.save(gr3);
sess.save(gr4);
sess.getTransaction().commit();
}
总结下:就是说,在映射的过程中,根据需求,写出映射关系,不一定非要导航,从学生直接导航到课程,,,
导航只是为了编码方便,不用导航,也可以直接通过QL语句,来确定学生学的科目。
在数据库建三张表,第一张关于学生,第二张关于成绩,第三张关于课程。
一个学生有多项成绩,一个学生选多个课程。
一项成绩里有一个学生,一项成绩里有一门课程,还有一个成绩(int)。
一个课程可被多个学生选择。
Student.java
@Entity public class Student { private String name; private int id; private Set<Course>courses=new HashSet<Course>(); private Set<Grade>grades=new HashSet<Grade>(); @ManyToMany(cascade=CascadeType.ALL) public Set<Course> getCourses() { return courses; } public void setCourses(Set<Course> courses) { this.courses = courses; } @OneToMany(cascade=CascadeType.ALL) public Set<Grade> getGrades() { return grades; } public void setGrades(Set<Grade> grades) { this.grades = grades; } @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; } }Grade.java
@Entity public class Grade { private Course course; private Student stu; private int id; private int score; @GeneratedValue @Id public int getId() { return id; } @OneToOne(cascade=CascadeType.ALL) public Course getCourse() { return course; } public void setCourse(Course course) { this.course = course; } @OneToOne(cascade=CascadeType.ALL) public Student getStu() { return stu; } public void setStu(Student stu) { this.stu = stu; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } public void setId(int id) { this.id = id; } }Course.java
@Entity public class Course { private String courseName; private Set<Student>students=new HashSet<Student>(); private int id; @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } public String getCourseName() { return courseName; } public void setCourseName(String courseName) { this.courseName = courseName; } @OneToMany(cascade=CascadeType.ALL,mappedBy="courses") public Set<Student> getStudents() { return students; } public void setStudents(Set<Student> students) { this.students = students; } }测试类:
public class Many2Many { SessionFactory sf=null; @Before public void before() { AnnotationConfiguration cfg=new AnnotationConfiguration().configure(); new SchemaExport(cfg).create(false, true); sf=cfg.buildSessionFactory(); } @After public void after() { sf.close(); } @Test public void TestSave() { Session sess=sf.getCurrentSession(); sess.beginTransaction(); Student st=new Student(); Student st2=new Student(); Grade gr=new Grade(); Grade gr2=new Grade(); Grade gr3=new Grade(); Grade gr4=new Grade(); Course co=new Course(); Course co2=new Course(); st.setName("st1"); st2.setName("st2"); co.setCourseName("co1"); co2.setCourseName("co2"); co.setId(1); co2.setId(2); gr.setCourse(co); gr.setStu(st); gr.setScore(90); gr2.setCourse(co2); gr2.setStu(st); gr2.setScore(80); gr3.setCourse(co); gr3.setStu(st2); gr3.setScore(70); gr4.setCourse(co2); gr4.setStu(st2); gr4.setScore(60); st.getGrades().add(gr); st.getGrades().add(gr2); st.getGrades().add(gr3); st.getGrades().add(gr4); st.getCourses().add(co); st.getCourses().add(co2); st2.getCourses().add(co); st2.getCourses().add(co2); co.getStudents().add(st); co.getStudents().add(st2); co2.getStudents().add(st); co2.getStudents().add(st2); sess.save(st); sess.save(st2); sess.getTransaction().commit(); } }
然而实际上,推荐这样写:
Course.java
@Entity
public class Course {
private String courseName;
private int id;
@Id
@GeneratedValue
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getCourseName() {
return courseName;
}
public void setCourseName(String courseName) {
this.courseName = courseName;
}
}
Grade.java
@Entity public class Grade { private Course course; private Student stu; private int id; private int score; @GeneratedValue @Id public int getId() { return id; } @OneToOne(cascade=CascadeType.ALL) public Course getCourse() { return course; } public void setCourse(Course course) { this.course = course; } @OneToOne(cascade=CascadeType.ALL) public Student getStu() { return stu; } public void setStu(Student stu) { this.stu = stu; } public int getScore() { return score; } public void setScore(int score) { this.score = score; } public void setId(int id) { this.id = id; } }Student.java
@Entity
public class Student {
private String name;
private int id;
@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;
}
}
测试类:
@Test
public void TestSave()
{
Session sess=sf.getCurrentSession();
sess.beginTransaction();
Student st=new Student();
Student st2=new Student();
Grade gr=new Grade();
Grade gr2=new Grade();
Grade gr3=new Grade();
Grade gr4=new Grade();
Course co=new Course();
Course co2=new Course();
st.setName("st1");
st2.setName("st2");
co.setCourseName("co1");
co2.setCourseName("co2");
co.setId(1);
co2.setId(2);
st.setId(1);
st2.setId(2);
gr.setCourse(co);
gr.setStu(st);
gr.setScore(90);
gr2.setCourse(co2);
gr2.setStu(st);
gr2.setScore(80);
gr3.setCourse(co);
gr3.setStu(st2);
gr3.setScore(70);
gr4.setCourse(co2);
gr4.setStu(st2);
gr4.setScore(60);
sess.save(st);
sess.save(st2);
sess.save(co);
sess.save(co2);
sess.save(gr);
sess.save(gr2);
sess.save(gr3);
sess.save(gr4);
sess.getTransaction().commit();
}
总结下:就是说,在映射的过程中,根据需求,写出映射关系,不一定非要导航,从学生直接导航到课程,,,
导航只是为了编码方便,不用导航,也可以直接通过QL语句,来确定学生学的科目。
相关文章推荐
- Hibernate 学习笔记-1-1(一个简单的Hibernate实例)
- Hibernate 学习笔记-1-1(一个简单的Hibernate实例)
- Hibernate 学习笔记-1-1(一个简单的Hibernate实例)
- [学习笔记]Java代码构建一个线程池的自己学习写的实例,用这个你会更好的理解文章内容
- Hibernate学习笔记1--------一个简单的应用
- Django学习笔记2:一个简单的开发实例
- Unix学习笔记-------目录遍历实例----Linux下判断是否是一个目录还是一个文件的方法
- 【OpenCV学习笔记】【编程实例】四(获取一个或多个感兴趣区域)
- Django学习笔记2:一个简单的开发实例
- hibernate学习笔记【对象继承采用一个表方式】
- Hibernate 实例学习笔记
- Java学习笔记------一个能相互通信的半双工Socket C/S实例
- [学习笔记]java SE 学习时候做的一个记事本实例(功能不全)自认为文件读和写还不错
- [Spring Data MongoDB]学习笔记--注册一个Mongo实例
- Junit学习笔记1---起步,探索和一个controller实例
- (Java2D 学习笔记系列) (一)一个简单的图像填充实例及其分析理解
- Prism4学习笔记4:动手完成一个MVVM实例
- 【学习笔记】实例解说Hibernate 一对多、多对一关联关系
- 【OpenCV学习笔记】【编程实例】三(将一个图像中的指定区域拷贝到另一个图像的指定区域