参考:http://hi.baidu.com/ohaozy/blog/item/ed486a33bc83cf48ac4b5f75.html

下面是我调试过的代码

通过简单的例子说明这几个关系:

以下测试都是在mysql5下完成,数据库表是由hibernate.cfg.xml里配置了。
one-to-many及many-to-one我以教师和学生的关系举例,一个教师对应多个学生,反过来多个学生对应一个教师。

  1. 建类

Teacher.java

[c-sharp] view plaincopyprint?
  1. package com.sjtu.xw.pojo;
  2. import java.util.HashSet;
  3. import java.util.Set;
  4. public class Teacher {
  5. private long id;
  6. private String teaName;
  7. private Set students = new HashSet();
  8. public long getId() {
  9. return id;
  10. }
  11. public void setId(long id) {
  12. this.id = id;
  13. }
  14. public String getTeaName() {
  15. return teaName;
  16. }
  17. public void setTeaName(String teaName) {
  18. this.teaName = teaName;
  19. }
  20. public Set getStudents() {
  21. return students;
  22. }
  23. public void setStudents(Set students) {
  24. this.students = students;
  25. }
  26. public String toString() {
  27. return "Teacher:[teacherId=" + this.id + "/tteacherName="
  28. + this.teaName + "]";
  29. }
  30. }

Student.java

[c-sharp] view plaincopyprint?
  1. package com.sjtu.xw.pojo;
  2. public class Student {
  3. private long id;
  4. private String stuName;
  5. public long getId() {
  6. return id;
  7. }
  8. public void setId(long id) {
  9. this.id = id;
  10. }
  11. public String getStuName() {
  12. return stuName;
  13. }
  14. public void setStuName(String stuName) {
  15. this.stuName = stuName;
  16. }
  17. public String toString() {
  18. return "student:[studentId=" + this.id + "/tstudentName="
  19. + this.stuName + "]";
  20. }
  21. }

Student.hbm.xml

[c-sharp] view plaincopyprint?
  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping package="com.sjtu.xw.pojo">
  6. <class name="Student" table="student">
  7. <id name="id" column="id">
  8. <generator class="native"></generator>
  9. </id>
  10. <property name="stuName" column="studentName" length="30" />
  11. </class>
  12. </hibernate-mapping>

Teacher.hbm.xml

[c-sharp] view plaincopyprint?
  1. <?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC
  3. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  5. <hibernate-mapping package="com.sjtu.xw.pojo">
  6. <class name="Teacher" table="teacher">
  7. <id name="id" column="id">
  8. <generator class="native"></generator>
  9. </id>
  10. <property name="teaName" column="teacherName" length="30" />
  11. <set name="students" fetch="join" lazy="false">
  12. <!--
  13. <set name="students">
  14. -->
  15. <key column="teacherId"></key>
  16. <!--
  17. 这里的column="teacherId" 是指明了在student表里有一个teacherId的列名,是指向teacher表的外键
  18. -->
  19. <one-to-many class="Student" />
  20. </set>
  21. </class>
  22. </hibernate-mapping>

hibernate.cfg.xml

[c-sharp] view plaincopyprint?
  1. <?xml version='1.0' encoding='utf-8'?>
  2. <!DOCTYPE hibernate-configuration PUBLIC
  3. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
  5. <hibernate-configuration>
  6. <session-factory>
  7. <!-- Database connection settings -->
  8. <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
  9. <property name="connection.url">jdbc:mysql://localhost:3306/coursems</property>
  10. <property name="connection.username">root</property>
  11. <property name="connection.password">root</property>
  12. <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
  13. <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
  14. <property name="show_sql">false</property>
  15. <mapping resource="com/sjtu/xw/pojo/Student.hbm.xml"/>
  16. <mapping resource="com/sjtu/xw/pojo/Teacher.hbm.xml"/>
  17. </session-factory>
  18. </hibernate-configuration>

HibernateUtil.java

[c-sharp] view plaincopyprint?
  1. package com.sjtu.xw.util;
  2. import org.hibernate.SessionFactory;
  3. import org.hibernate.cfg.Configuration;
  4. public class HibernateUtil {
  5. private static final SessionFactory sessionFactory = buildSessionFactory();
  6. private static SessionFactory buildSessionFactory() {
  7. try {
  8. // Create the SessionFactory from hibernate.cfg.xml
  9. return new Configuration().configure().buildSessionFactory();
  10. }
  11. catch (Throwable ex) {
  12. // Make sure you log the exception, as it might be swallowed
  13. System.err.println("Initial SessionFactory creation failed." + ex);
  14. throw new ExceptionInInitializerError(ex);
  15. }
  16. }
  17. public static SessionFactory getSessionFactory() {
  18. return sessionFactory;
  19. }
  20. }

Test.java

[c-sharp] view plaincopyprint?
  1. package com.sjtu.xw.test;
  2. import java.util.List;
  3. import org.hibernate.Session;
  4. import org.hibernate.SessionFactory;
  5. import org.hibernate.Transaction;
  6. import com.sjtu.xw.pojo.Student;
  7. import com.sjtu.xw.pojo.Teacher;
  8. import com.sjtu.xw.util.HibernateUtil;
  9. public class Test {
  10. public static void main(String[] args)
  11. {
  12. Test test=new Test();
  13. //test.addStudent();
  14. //test.addTeacher();
  15. test.test();
  16. }
  17. public void addStudent() {
  18. Student student = new Student();
  19. student.setStuName("student6");
  20. SessionFactory sf = HibernateUtil.getSessionFactory();
  21. Session session = sf.openSession();
  22. Transaction tx = session.beginTransaction();
  23. session.save(student);
  24. tx.commit();
  25. session.close();
  26. sf.close();
  27. }
  28. public  void addTeacher() {
  29. Student student = new Student();
  30. student.setId(3);
  31. Teacher teacher = new Teacher();
  32. teacher.setTeaName("Teacher1");
  33. teacher.getStudents().add(student); // 把id为1的学生添加到教师对象
  34. // 保存这个教师的同时会更新student表
  35. SessionFactory sf = HibernateUtil.getSessionFactory();
  36. Session session = sf.openSession();
  37. Transaction tx = session.beginTransaction();
  38. session.save(teacher);
  39. tx.commit();
  40. session.close();
  41. sf.close();
  42. }
  43. public void test()
  44. {
  45. SessionFactory sf = HibernateUtil.getSessionFactory();
  46. Session session = sf.openSession();
  47. Transaction tx = session.beginTransaction();
  48. List list = session.createQuery("from Teacher t where t.id=1").list();
  49. //List list = session.createQuery("from Teacher t left join fetch t.students where t.id=1").list();
  50. Teacher t = (Teacher)list.get(0);
  51. System.out.println(t);//
  52. System.out.println(t.getStudents().iterator().next());
  53. for(int i=0;i<list.size();i++)
  54. {
  55. Teacher tt = (Teacher)list.get(i);
  56. System.out.println(tt);//
  57. System.out.println(tt.getStudents().iterator().next());
  58. }
  59. /*//未明白什么意思,和session有什么关系呢?
  60. * 上面这句话放在session结束前,student在用到的时候将会自动被查询出来,否则查询语句应改为:
  61. * from Teacher t left join fetch t.students where t.id=1
  62. * 或者设置teacher.hbm.xml里的set属性,加上:fetch="join" lazy="false":
  63. * <set name="students" fetch="join" lazy="false">
  64. * <key column="teacherId"></key> <one-to-many class="model.Student"/> </set>
  65. */
  66. tx.commit();
  67. session.close();
  68. sf.close();
  69. }
  70. }

本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2010/11/30/2297066.html,如需转载请自行联系原作者

hibernate中one-to-many实例一相关推荐

  1. hibernate中的hql查询语句list查询所有与iterate查询所有的区别

    hibernate中的hql查询语句list查询所有与iterate查询所有的区别 list查询所有: 01,会立即产生一条select语句1select查询出来的所有语句都会被session管理, ...

  2. HQL语句中数据类型转换,及hibernate中createQuery执行hql报错

    一.HQL语句中数据类型转换: 我们需要从数据库中取出序号最大的记录,想到的方法就是使用order by子句进行排序(desc倒序),然后取出第一个对象,可是当初设计数据库时(我们是在原来的数据库的基 ...

  3. hibernate(七) hibernate中查询方式详解

    序言 之前对hibernate中的查询总是搞混淆,不明白里面具体有哪些东西.就是因为缺少总结.在看这篇文章之前,你应该知道的是数据库的一些查询操作,多表查询等,如果不明白,可以先去看一下 MySQL数 ...

  4. hibernate中的PO持久化对象及PO三种状态

    一,认识持久化对象PO: 在hibernate的应用程序中,每一个数据库中的表都对应一个持久化对象PO.PO可以看成是与数据库表相映射的java对象.最简单的PO对应数据库中某个表中的一条记录,多个记 ...

  5. hibernate中SessionFactory,Session的理解?

    Session接口         Session接口对于Hibernate   开发人员来说是一个最重要的接口.然而在Hibernate中,实例化的Session是一个轻量级的类,创建和销毁它都不会 ...

  6. hibernate中@Entity和@Table的区别

    Java Persistence API定义了一种定义,可以将常规的普通Java对象(有时被称作POJO)映射到数据库. 这些普通Java对象被称作Entity Bean. 除了是用Java Pers ...

  7. hibernate中的一级缓存

    hibernate中的一级缓存 Hibernate提供了两种缓存,这里主要写一级缓存. 第一级缓存是session的缓存,由于Session对象的生命周期通常对应一个数据事务或者一个应用事务,因此它的 ...

  8. Hibernate中保存与持久性以及saveOrUpdate之间的区别

    保存与保存或更新与持久保存在Hibernate中 save和saveOrUpdate之间的区别是什么或save和persist之间的区别是任何Hibernate面试中常见的面试问题,就像Hiberna ...

  9. Hibernate中的一对多XML映射

    一对多关系指出一个实体的单个实例与另一个实体的多个实例相关联. 换句话说,一个表中的每个记录与另一个表中的多个记录相关联. 让我们看看如何通过XML映射文件在Hibernate中定义这种关系. 1.实 ...

  10. hibernate中对象的3种状态----瞬时态、持久态、脱管态

    转载: http://www.blogjava.net/amigoxie/archive/2007/02/11/99342.html Hibernate的对象有3种状态,分别为:瞬时态(Transie ...

最新文章

  1. 队列和消息队列_消息队列概述[幻灯片]
  2. ubuntu 安装 LAMP
  3. 08.MyBatis整合Log4j
  4. 基于游戏开发的C语言大作业视频集锦
  5. intellij idea写Springboot生成图片验证码两种实现方式(全码)
  6. 服务器自动关闭远程打印服务,服务器能远程链接远程打印机不
  7. springboot elementui vue商城微信小程序源码(毕设)开发讲解
  8. PPT 图表不显示对应类型的数据解决办法
  9. 使用快捷指令高德导航(高德地图)
  10. c语言编程n元一次方程,用C语言编写程序:N元一次方程组的解.docx
  11. Vue3.x的安装和初始化
  12. Ubuntu 设置合上笔记本盖子不休眠的方法
  13. 防止excel单元格有效性验证因被粘贴而失效
  14. 【算法】跑ORB-SLAM遇到的问题、解决方法、效果展示(环境:Ubuntu18.04+ROS melodic)
  15. linux $0命令,Linux:awk命令详解
  16. 【编程语言】Python 从菜鸟到高手
  17. Python包装网页微信API并实现简单自动回复
  18. SplendidCRM
  19. 面试后要请你吃饭_朋友入职阿里请我吃饭,只因为面试前我逼他看了这些,经验很重要...
  20. 2021年茶艺师(中级)考试技巧及茶艺师(中级)模拟考试题库

热门文章

  1. 【Alpha】十天屠龙记
  2. fscokopen 中执行超时 使用stream_set_timeout设置超时
  3. 1100名达摩院“扫地僧”加持,阿里云的下一个十年
  4. DataFrame.apply()
  5. 基本STRUTS标签-学习笔记-Bean标签
  6. 如何将Node.js Streaming MapReduce引入Amazon EMR
  7. 登录tomcat服务器首页直接跳转到项目
  8. JavaScript 命名空间
  9. flex皮肤制作---通过flash
  10. 刘德华--6雪藏是一种代价