Hibernate实验二.doc_第1页
Hibernate实验二.doc_第2页
Hibernate实验二.doc_第3页
Hibernate实验二.doc_第4页
Hibernate实验二.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Hibernate实验二实验内容:1. 双向多对多关联映射2. Hibernate检索方式实验目的:1. 掌握多对多关联关系的配置2. 掌握cascade、inverse属性的使用3. 掌握HQL查询的使用步骤4. 掌握QBC查询的使用步骤一、 双向多对多关联映射以学生课程表为例,一个学生可以选修多门课程,一门课程也可以被多位学生选修。1. 建立数据库表学生表:create table student( sid int not null auto_increment primary key, sname varchar ( 16 ), sage varchar ( 16 );课程表:create table course( cid int not null auto_increment primary key, cname varchar ( 16 );关联表:create table student_course_link( sid int not null, cid int not null, primary key (sid,cid), foreign key (sid) references student (sid), foreign key (cid) references course (cid);2. 创建Java项目mtm,并添加Hibernate包创建many.to.many.bean包,产生的实体类和映射文件将放到此包下。3. 使用Hibernate逆向工程自动产生实体类和映射文件利用上次实验的方法,找到数据库下的表。使用Hibernate逆向工程产生实体类和映射文件。请选择“many-to-many”。选择双向多对多,出现三个表。产生的实体类和映射文件如下:学生类:public class Student implements java.io.Serializable / Fieldsprivate Integer sid;private String sname;private String sage;private Set courses = new HashSet(0);/省略setter和getter课程类:public class Course implements java.io.Serializable / Fieldsprivate Integer cid;private String cname;private Set students = new HashSet(0);/省略setter和getterStudent.hbm.xml映射文件 Course.hbm.xml映射文件 4. 编码测试,插入一组数据package many.to.many.test;import java.util.HashSet;import java.util.Set;import many.to.many.bean.Course;import many.to.many.bean.Student;import many.to.many.sf.HibernateSessionFactory;import org.hibernate.Session;import org.hibernate.Transaction;public class Test public static void main(String args) /学生对象Student s1=new Student();s1.setSname(Tom);s1.setSage(21);Student s2=new Student();s2.setSname(Jerry);s2.setSage(20);/课程对象Course c1=new Course();c1.setCname(C+);Course c2=new Course();c2.setCname(Java);Course c3=new Course();c3.setCname(C#);Set students=new HashSet();students.add(s1);students.add(s2);Set courses=new HashSet();courses.add(c1);courses.add(c2);courses.add(c3);/建立双向关联s1.setCourses(courses);s2.setCourses(courses);c1.setStudents(students);c2.setStudents(students);c3.setStudents(students);Session session=HibernateSessionFactory.getSession();Transaction tx=session.beginTransaction();/请将Student.hbm.xml中的set标签的cascade设置为true,这样保存Student对象的时候会级联保存Course,/否则在向关联表插入数据的时候,由于找不到参照的Course数据会报异常/Exception in thread main org.hibernate.TransientObjectException: /object references an unsaved transient instance /- save the transient instance before flushing: many.to.many.bean.Coursesession.save(s1);session.save(s2);mit();HibernateSessionFactory.closeSession();成功插入:二、 Hibernate检索在上面实验的数据基础之上,学习HQL与QBC检索的使用步骤。1.HQL:查询姓名以“T”开头的学生,所选择的课程package many.to.many.test;import java.util.Iterator;import java.util.List;import java.util.Set;import many.to.many.bean.Course;import many.to.many.bean.Student;import many.to.many.sf.HibernateSessionFactory;import org.hibernate.Query;import org.hibernate.Session;public class Test2 public static void main(String args) String queryString=from Student s where s.sname like T%;Session s=HibernateSessionFactory.getSession();Query q=s.createQuery(queryString);List l=q.list();Iterator i=l.iterator();while (i.hasNext() Student student = (Student) i.next();Set courses = student.getCourses();Iterator i2=courses.iterator();while (i2.hasNext() Course c = (Course) i2.next();System.out.println(student.getSname()+ +c.getCname();2.QBC:查询姓名以“T”开头的学生,所选择的课程package many.to.many.test;import java.util.Iterator;import java.util.List;import java.util.Set;import many.to.many.bean.Course;import many.to.many.bean.Student;import many.to.many.sf.HibernateSessionFactory;import org.hibernate.Criteria;import org.hibernate.Session;import org.hibernate.criterion.Restrictions;public class Test3 public static void main(String args) Session s=HibernateSessionFactory.getSession();Criteria criteria=s.createCriteria(Student.class);criteria.add(Restrictions.like(sname, T%);List l=criteria.list();Iterator i=l.iterator();while (i.hasNext() Stude

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论