hibernate3.3.2学习笔记--- 一个小实例
来源:互联网 发布:透明计算造假 知乎 编辑:程序博客网 时间:2024/06/17 01:05
任务是这样的:
在数据库建三张表,第一张关于学生,第二张关于成绩,第三张关于课程。
一个学生有多项成绩,一个学生选多个课程。
一项成绩里有一个学生,一项成绩里有一门课程,还有一个成绩(int)。
一个课程可被多个学生选择。
Student.java
@Entitypublic 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@GeneratedValuepublic 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
@Entitypublic class Grade {private Course course;private Student stu;private int id;private int score;@GeneratedValue@Idpublic 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
@Entitypublic 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;@Beforepublic void before(){AnnotationConfiguration cfg=new AnnotationConfiguration().configure(); new SchemaExport(cfg).create(false, true); sf=cfg.buildSessionFactory();}@Afterpublic void after(){sf.close();}@Testpublic 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
@Entitypublic 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
@Entitypublic class Grade {private Course course;private Student stu;private int id;private int score;@GeneratedValue@Idpublic 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
@Entitypublic class Student {private String name; private int id;@Id@GeneratedValuepublic 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;}}测试类:
@Testpublic 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语句,来确定学生学的科目。
0 0
- hibernate3.3.2学习笔记--- 一个小实例
- hibernate3.3.2学习笔记
- Spring3+hibernate3小实例
- Hibernate3.3.2学习笔记---generator
- hibernate3.3.2学习笔记 --- fetch
- hibernate3.3.2学习笔记---第一个程序
- hibernate3.3.2学习笔记---重要细节
- hibernate3.3.2学习笔记---联合主键
- hibernate3.3.2学习笔记---getCurrentSession()与openSession()
- hibernate3.3.2学习笔记---One2One关联单向
- hibernate3.3.2学习笔记 --- 组件映射
- hibernate3.3.2学习笔记 --- 多对一
- hibernate3.3.2学习笔记--- 一对多
- hibernate3.3.2学习笔记---OneToMany双向关联
- hibernate3.3.2学习笔记---CRUD_Cascade与fetch
- hibernate3.3.2学习笔记---将一棵树存进数据库
- hibernate3学习笔记(一)
- hibernate3 学习笔记(一)
- Javascript模块化编程(二):AMD规范
- Android软键盘弹出或关闭监控
- 有序列表和无序列表 学习笔记
- CSS 中 # 和 . 的区别
- 子线程是否可以刷新UI视图?
- hibernate3.3.2学习笔记--- 一个小实例
- CRF++中文分词
- ethercat 主 从站的建立
- android_04_线性布局
- HDU 5908 Abelian Period 模拟乱搞
- mvc加载composer且用composer加载medoo数据类
- 欢迎使用CSDN-markdown编辑器
- leetcode-3 Longest Substring Without Repeating Characters经典的动态规划问题
- dedecms后台所有档案列表和等待审核的档案重叠怎么办?