相对于上述一关系,在这里,下一个一对多关系说明。

另外,在上述。我们描述了许多人描述的一一对应关系。在关系数据库是多对一的关系。但也有许多关系。

但,只知道它是不够的,Hibernate它是一种面向对象的结构,于Hibernate还有多对一的关系,没有一对多,所以我们须要额外加入一对多的关系。

部门实体类:Department.java

  1. package cn.itcast.hibernate.domain;
  2.  
  3. import java.util.Set;
  4.  
  5. public class Department {
  6. private int id;
  7. private String name;
  8. private Set<Employee> emps;
  9.  
  10. public Set<Employee> getEmps() {
  11. return emps;
  12. }
  13. public void setEmps(Set<Employee> emps) {
  14. this.emps = emps;
  15. }
  16. public int getId() {
  17. return id;
  18. }
  19. public void setId(int id) {
  20. this.id = id;
  21. }
  22. public String getName() {
  23. return name;
  24. }
  25. public void setName(String name) {
  26. this.name = name;
  27. }
  28. }

部门映射关系:Department.hbm.xml

  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
  6. package="cn.itcast.hibernate.domain">
  7.  
  8. <class name="Department" table="tb_Department">
  9. <id name="id">
  10. <generator class="native"/>
  11. </id>
  12. <property name="name" />
  13.  
  14. <set name="emps">
  15. <key column="depart_id" />
  16. <one-to-many class="Employee" />
  17. </set>
  18. </class>
  19.  
  20. </hibernate-mapping>

我们须要注意的是:在部门实体类中。我们添加了一个set集合属性。而且在映射文件里我们也添加了一个set属性。这是为了映射一对多的关系。

在映射文件里的set标签,我们定义了一个key标签,这是外键。必须与员工类的外键同样。

员工实体类:Employee.java

  1. package cn.itcast.hibernate.domain;
  2.  
  3. public class Employee {
  4. private int id;
  5. private String name;
  6. private Department depart;
  7.  
  8. public int getId() {
  9. return id;
  10. }
  11. public void setId(int id) {
  12. this.id = id;
  13. }
  14. public String getName() {
  15. return name;
  16. }
  17. public void setName(String name) {
  18. this.name = name;
  19. }
  20. public Department getDepart() {
  21. return depart;
  22. }
  23. public void setDepart(Department depart) {
  24. this.depart = depart;
  25. }
  26. }

员工映射关系:Employee.hbm.xml

  1. <?
  2.  
  3. xml version="1.0"?>
  4. <!DOCTYPE hibernate-mapping PUBLIC
  5. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  6. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  7. <hibernate-mapping
  8. package="cn.itcast.hibernate.domain">
  9. <class name="Employee" table="tb_Employee">
  10. <id name="id">
  11. <generator class="native"/>
  12. </id>
  13. <property name="name" />
  14. <many-to-one name="depart" column="depart_id" />
  15. </class>
  16.  
  17. </hibernate-mapping>

接下来,我们写一个測试的类:Many2One.java

  1. public class Many2One {
  2. public static void main(String[] arg){
  3. Department depart = add();
  4. query(depart.getId());
  5. }
  6.  
  7. static Department add(){
  8. Session s = null;
  9. Transaction tx = null;
  10. try{
  11. Department depart = new Department();
  12. depart.setName("depart name");
  13.  
  14. Employee emp1 = new Employee();
  15. emp1.setDepart(depart); //建立两个对象的关联关系
  16. emp1.setName("emp name");
  17.  
  18. Employee emp2 = new Employee();
  19. emp2.setDepart(depart); //建立两个对象的关联关系
  20. emp2.setName("emp name");
  21.  
  22. s = HibernateUtil.getSession();
  23. tx = s.beginTransaction();
  24. s.save(depart);
  25. s.save(emp1); //emp对象和depart对象保存的先后顺序不同也会有一定的差异
  26. s.save(emp2); //假设员工(emp)先插入。部门(depart)后插入,会生成三条数据库语句,
  27. //由于在两者都插入之后,emp的depart_id字段还未插入,所以还要有最后一条语句插入
  28. tx.commit();
  29. return depart;
  30. }finally{
  31. if(s!=null){
  32. s.close();
  33. }
  34. }
  35. }
  36.  
  37. static Department query(int departId){
  38. Session s = null;
  39. Transaction tx = null;
  40. try{
  41. s = HibernateUtil.getSession();
  42. tx = s.beginTransaction();
  43. Department depart = (Department)s.get(Department.class, departId); //依据ID查询
  44. System.out.println("emp size:"+depart.getEmps().size());
  45. //Hibernate.initialize(depart.getEmps());
  46. tx.commit();
  47. return depart;
  48. }finally{
  49. if(s!=null){
  50. s.close();
  51. }
  52. }
  53. }
  54. }

在main函数中,我们加入了两个数据。然后查询部门id,能够得到两个结水果。

版权声明:本文博主原创文章,博客,未经同意不得转载。

【SSH三框架】Hibernate基金会七:许多附属业务的更多相关文章

  1. 【SSH三框架】Struts2第一章的基础:第一次写Struts2规划

    今年八月,当已经SSH三架完成学业.然后,他感动Android开展.三个框架已经很长的时间做无用的东西.所以,如果你想花三四天的时间来复习一下,写在博客. 附带SSH整个jar包网盘下载:http:/ ...

  2. 用最简单话概括SSH三框架

    Hibernate用来做持久层,因为它将JDBC做了一个良好的封装,程序员在与数据库进行交互时可以不用书写大量的SQL语句. Struts是用来做应用层的,他它负责调用业务逻辑serivce层,所以S ...

  3. 【SSH三框架】Struts2第六章的基础:他们拦截函数的定义

    干web当然,需要做的事情时,项目管理登录身份验证及其他权利.假设我们必须使用相应的登陆,未经允许是不可能的. 因此,我们需要使用拦截器,拦截功能struts2它集成.当然,有可能在Spring正在使 ...

  4. SSH(Struts2+Spring+Hibernate)框架搭建流程<注解的方式创建Bean>

    此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblo ...

  5. eclipse中SSH三大框架环境搭建<三>

    相关链接: eclipse中SSH三大框架环境搭建<一> eclipse中SSH三大框架环境搭建<二> 引言:通过上两篇文章我们已经可以掌握struts2和spring的环境的 ...

  6. 三大框架SSH(struts2+spring+hibernate)整合时相关配置文件的模板

    最近在学SSH三大框架的整合,在此对他们整合时相关配置文件做一简单的模板总结,方便以后复用! 首先是web.xml配置文件,这里面就配置一些简单的监听器.过滤器,包括spring核心配置文件appli ...

  7. [ SSH框架 ] Hibernate框架学习之二

    一.Hibernate持久化类的编写规范 1.什么是持久化类 Hibernate是持久层的ORM影射框架,专注于数据的持久化工作.所谓持久化,就是将内存中的数据永久存储到关系型数据库中.那么知道了什么 ...

  8. 【SSH系列】-- Hibernate持久化对象的三种状态

    在上一篇博文中,小编主要简单的介绍了[SSH系列]--hibernate基本原理&&入门demo,今天小编来继续介绍hibernate的相关知识, 大家知道,Java对象的生命周期,是 ...

  9. SSH(Spring SpringMVC Hibernate)框架整合

    项目说明: 使用SSH(Spring SpringMVC Hibernate)框架整合添加部门功能 项目结构   1.导入依赖jar包 <!--单测--> <dependency&g ...

随机推荐

  1. HQApi命令行接口配置

    执行的命令行前准备 在您的个人文件夹中第一次创建 型材client.properties 如下面 cd C:\Users\scnyli\ mkdir ".hq" 创建一个 clie ...

  2. 【原创】poj ----- 2524 Ubiquitous Religions 解题报告

    题目地址: http://poj.org/problem?id=2524 题目内容: Ubiquitous Religions Time Limit: 5000MS   Memory Limit: 6 ...

  3. GNU名称解析

    GNU它是GNU's NOT UNIX缩写G     N    U缩写,和GNU全名GNU's NOT UNIX 中间 GNU 也GNU's NOT UNIX缩写,它使用递归方式定义GNU.

  4. ubuntu 12.04安装经典的Gnome桌面

    这次介绍的是如何在ubuntu 12.04 中安装经典的 GNOME桌面,默认的 Ubuntu 12.04 默认unity桌面,一些用户不喜欢 Unity 桌面,所以想找回昔日的经典Gnome桌面. ...

  5. java.nio分析软件包(三)---Charset理解力

    前面的分析后,2一个基本的封装类型.现在我们就来揭开Java.nio魔法知识的最后一块,CharsetEncoding类,他的主要功能是实现字节Unicode之间的转换转码. 让我们来看看他同样的封装 ...

  6. Android含文档server结束(client UI接口异步请求的一部分)三

    在本文中,AsyncTask为了实现异步请求,详细代码如下所示的: public class downloadActivity extends Activity { private TextView ...

  7. Linux 编程学习笔记----过程管理和项目发展(在)

    转载请注明出处,http://blog.csdn.net/suool/article/details/38406211,谢谢. Linux进程存储结构和进程结构 可运行文件结构 例如以下图: 能够看出 ...

  8. json学习初体验--第三者jar包实现bean、List、map创json格式

    1.的需要jar包裹json-lib.jar 下载链接: http://sourceforge.net/projects/json-lib/files/json-lib/ 此包还须要下面的依赖包, c ...

  9. Libgdx Box2D现实------这缓释微丸(一个:项目介绍)

    它花了两个星期的假写物理游戏,在几次课逃逸,是大学,因为大部分时间点!今天,我基本上一直每节课的点1-3有时它,哎,这似乎是不再逃跑.不知道值没有值得,仅仅是简单地想做自己喜欢的事情,而不是跟老师大眼 ...

  10. struts2移除标签button的id传统的价值观念问题

    <!--显示数据列表--> <tbody id="TableData" class="dataContainer" datakey=" ...