【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 ...
随机推荐
- Java Map 迭代
Map迭代 有两种 道路 遍历 Map该方法: 1 Set<K> KeySet(): 获取全部的键,得到set集合,迭代, 通过get( key)获取值! 2 Se ...
- jquey :eq(1)
$("#div_Goods .datagrid-row .numberbox:eq(1)") $("#div_Goods .datagrid-row .numberbox ...
- Windows 8 应用开发 - 本地数据存储
原文:Windows 8 应用开发 - 本地数据存储 在应用中通常会遇到用户主动或被动存储信息的情况,当应用关闭后这些数据仍然会存储在本地设备上,用户下次重新激活应用时会自动加载这些数据.下 ...
- C#判断操作系统是32位还是64位(超简单)
由于项目需要在64位和32位系统运行,需要判断当前系统是32位还是64位. 网上很多方法,但是都感觉不是很简洁,最后发现可以使用int的长度来判断:看代码 /// <summary> ...
- 重新想象 Windows 8 Store Apps (27) - 选取器: 联系人选取窗口, 自定义联系人选取窗口
原文:重新想象 Windows 8 Store Apps (27) - 选取器: 联系人选取窗口, 自定义联系人选取窗口 [源码下载] 重新想象 Windows 8 Store Apps (27) - ...
- Vim配置说明
使用这些天一直vim,我认为vim这是一个非常强大的编辑器,尤其是后配置. 互联网参考大牛个月vim配置,然后更改加入了一部分,形成了自己的配置.让Vim变的更强大. 详细有下面几个特点: 1.自己主 ...
- jQuery照片伸缩效应,这不是一个简单的图像缩放,它不影响其它元素的布局
之前在网上看到这样的效果,但我没有收藏夹网址,后来被我不知道如何来实现这种效果. 如今,互联网已收集有关专门.真是功夫不负有心人,被我发现. 我也努力过自己尝试着写: 但仅仅是单纯的图片放大.并且还影 ...
- 设计模式C++达到 1.辛格尔顿
实现类的单个案件的Singleton模式.该系统有一个类只有一个实例,而本实施例是容易的外部访问.所以容易控制的实例的数量,并且节省系统资源. 单的情况下通常与一些非本地静态对象的使用,对于这些对象, ...
- c# 操作 MongoDB 的 第三方类库 MongoRepository
https://github.com/RobThree/MongoRepository 文档 https://github.com/RobThree/MongoRepository/wiki/Docu ...
- 高榕资本宾悦:未使用的企业家Testin云测试服务类故障
高榕资本岳斌:创业者未使用Testin云測试服务属不合格 2014/10/09 · Testin · 开发人员訪谈 Testin云測与工信部等联合承办的ICT中国.2014高层论坛之移动开发人员分论坛 ...