【SSH三框架】Hibernate基金会七:许多附属业务
相对于上述一关系,在这里,下一个一对多关系说明。
另外,在上述。我们描述了许多人描述的一一对应关系。在关系数据库是多对一的关系。但也有许多关系。
但,只知道它是不够的,Hibernate它是一种面向对象的结构,于Hibernate还有多对一的关系,没有一对多,所以我们须要额外加入一对多的关系。
部门实体类:Department.java
- package cn.itcast.hibernate.domain;
- import java.util.Set;
- public class Department {
- private int id;
- private String name;
- private Set<Employee> emps;
- public Set<Employee> getEmps() {
- return emps;
- }
- public void setEmps(Set<Employee> emps) {
- this.emps = emps;
- }
- 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;
- }
- }
部门映射关系:Department.hbm.xml
- <?xml version="1.0"?>
- <!DOCTYPE hibernate-mapping PUBLIC
- "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping
- package="cn.itcast.hibernate.domain">
- <class name="Department" table="tb_Department">
- <id name="id">
- <generator class="native"/>
- </id>
- <property name="name" />
- <set name="emps">
- <key column="depart_id" />
- <one-to-many class="Employee" />
- </set>
- </class>
- </hibernate-mapping>
我们须要注意的是:在部门实体类中。我们添加了一个set集合属性。而且在映射文件里我们也添加了一个set属性。这是为了映射一对多的关系。
在映射文件里的set标签,我们定义了一个key标签,这是外键。必须与员工类的外键同样。
员工实体类:Employee.java
- package cn.itcast.hibernate.domain;
- public class Employee {
- private int id;
- private String name;
- private Department depart;
- 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;
- }
- public Department getDepart() {
- return depart;
- }
- public void setDepart(Department depart) {
- this.depart = depart;
- }
- }
员工映射关系:Employee.hbm.xml
- <?
- xml version="1.0"?>
- <!DOCTYPE hibernate-mapping PUBLIC
- "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping
- package="cn.itcast.hibernate.domain">
- <class name="Employee" table="tb_Employee">
- <id name="id">
- <generator class="native"/>
- </id>
- <property name="name" />
- <many-to-one name="depart" column="depart_id" />
- </class>
- </hibernate-mapping>
接下来,我们写一个測试的类:Many2One.java
- public class Many2One {
- public static void main(String[] arg){
- Department depart = add();
- query(depart.getId());
- }
- static Department add(){
- Session s = null;
- Transaction tx = null;
- try{
- Department depart = new Department();
- depart.setName("depart name");
- Employee emp1 = new Employee();
- emp1.setDepart(depart); //建立两个对象的关联关系
- emp1.setName("emp name");
- Employee emp2 = new Employee();
- emp2.setDepart(depart); //建立两个对象的关联关系
- emp2.setName("emp name");
- s = HibernateUtil.getSession();
- tx = s.beginTransaction();
- s.save(depart);
- s.save(emp1); //emp对象和depart对象保存的先后顺序不同也会有一定的差异
- s.save(emp2); //假设员工(emp)先插入。部门(depart)后插入,会生成三条数据库语句,
- //由于在两者都插入之后,emp的depart_id字段还未插入,所以还要有最后一条语句插入
- tx.commit();
- return depart;
- }finally{
- if(s!=null){
- s.close();
- }
- }
- }
- static Department query(int departId){
- Session s = null;
- Transaction tx = null;
- try{
- s = HibernateUtil.getSession();
- tx = s.beginTransaction();
- Department depart = (Department)s.get(Department.class, departId); //依据ID查询
- System.out.println("emp size:"+depart.getEmps().size());
- //Hibernate.initialize(depart.getEmps());
- tx.commit();
- return depart;
- }finally{
- if(s!=null){
- s.close();
- }
- }
- }
- }
在main函数中,我们加入了两个数据。然后查询部门id,能够得到两个结水果。
版权声明:本文博主原创文章,博客,未经同意不得转载。
【SSH三框架】Hibernate基金会七:许多附属业务的更多相关文章
- 【SSH三框架】Struts2第一章的基础:第一次写Struts2规划
今年八月,当已经SSH三架完成学业.然后,他感动Android开展.三个框架已经很长的时间做无用的东西.所以,如果你想花三四天的时间来复习一下,写在博客. 附带SSH整个jar包网盘下载:http:/ ...
- 用最简单话概括SSH三框架
Hibernate用来做持久层,因为它将JDBC做了一个良好的封装,程序员在与数据库进行交互时可以不用书写大量的SQL语句. Struts是用来做应用层的,他它负责调用业务逻辑serivce层,所以S ...
- 【SSH三框架】Struts2第六章的基础:他们拦截函数的定义
干web当然,需要做的事情时,项目管理登录身份验证及其他权利.假设我们必须使用相应的登陆,未经允许是不可能的. 因此,我们需要使用拦截器,拦截功能struts2它集成.当然,有可能在Spring正在使 ...
- SSH(Struts2+Spring+Hibernate)框架搭建流程<注解的方式创建Bean>
此篇讲的是MyEclipse9工具提供的支持搭建自加包有代码也是相同:用户登录与注册的例子,表字段只有name,password. SSH,xml方式搭建文章链接地址:http://www.cnblo ...
- eclipse中SSH三大框架环境搭建<三>
相关链接: eclipse中SSH三大框架环境搭建<一> eclipse中SSH三大框架环境搭建<二> 引言:通过上两篇文章我们已经可以掌握struts2和spring的环境的 ...
- 三大框架SSH(struts2+spring+hibernate)整合时相关配置文件的模板
最近在学SSH三大框架的整合,在此对他们整合时相关配置文件做一简单的模板总结,方便以后复用! 首先是web.xml配置文件,这里面就配置一些简单的监听器.过滤器,包括spring核心配置文件appli ...
- [ SSH框架 ] Hibernate框架学习之二
一.Hibernate持久化类的编写规范 1.什么是持久化类 Hibernate是持久层的ORM影射框架,专注于数据的持久化工作.所谓持久化,就是将内存中的数据永久存储到关系型数据库中.那么知道了什么 ...
- 【SSH系列】-- Hibernate持久化对象的三种状态
在上一篇博文中,小编主要简单的介绍了[SSH系列]--hibernate基本原理&&入门demo,今天小编来继续介绍hibernate的相关知识, 大家知道,Java对象的生命周期,是 ...
- SSH(Spring SpringMVC Hibernate)框架整合
项目说明: 使用SSH(Spring SpringMVC Hibernate)框架整合添加部门功能 项目结构 1.导入依赖jar包 <!--单测--> <dependency&g ...
随机推荐
- HQApi命令行接口配置
执行的命令行前准备 在您的个人文件夹中第一次创建 型材client.properties 如下面 cd C:\Users\scnyli\ mkdir ".hq" 创建一个 clie ...
- 【原创】poj ----- 2524 Ubiquitous Religions 解题报告
题目地址: http://poj.org/problem?id=2524 题目内容: Ubiquitous Religions Time Limit: 5000MS Memory Limit: 6 ...
- GNU名称解析
GNU它是GNU's NOT UNIX缩写G N U缩写,和GNU全名GNU's NOT UNIX 中间 GNU 也GNU's NOT UNIX缩写,它使用递归方式定义GNU.
- ubuntu 12.04安装经典的Gnome桌面
这次介绍的是如何在ubuntu 12.04 中安装经典的 GNOME桌面,默认的 Ubuntu 12.04 默认unity桌面,一些用户不喜欢 Unity 桌面,所以想找回昔日的经典Gnome桌面. ...
- java.nio分析软件包(三)---Charset理解力
前面的分析后,2一个基本的封装类型.现在我们就来揭开Java.nio魔法知识的最后一块,CharsetEncoding类,他的主要功能是实现字节Unicode之间的转换转码. 让我们来看看他同样的封装 ...
- Android含文档server结束(client UI接口异步请求的一部分)三
在本文中,AsyncTask为了实现异步请求,详细代码如下所示的: public class downloadActivity extends Activity { private TextView ...
- Linux 编程学习笔记----过程管理和项目发展(在)
转载请注明出处,http://blog.csdn.net/suool/article/details/38406211,谢谢. Linux进程存储结构和进程结构 可运行文件结构 例如以下图: 能够看出 ...
- json学习初体验--第三者jar包实现bean、List、map创json格式
1.的需要jar包裹json-lib.jar 下载链接: http://sourceforge.net/projects/json-lib/files/json-lib/ 此包还须要下面的依赖包, c ...
- Libgdx Box2D现实------这缓释微丸(一个:项目介绍)
它花了两个星期的假写物理游戏,在几次课逃逸,是大学,因为大部分时间点!今天,我基本上一直每节课的点1-3有时它,哎,这似乎是不再逃跑.不知道值没有值得,仅仅是简单地想做自己喜欢的事情,而不是跟老师大眼 ...
- struts2移除标签button的id传统的价值观念问题
<!--显示数据列表--> <tbody id="TableData" class="dataContainer" datakey=" ...