【Hibernate步步为营】--(一对多映射)之单向关联
上篇文章讨论了双向关联的一对一映射,用了两个章节。主要是从主键和外键两种关联映射展开具体讨论。双向关联的映射须要在两个映射文件里分别加入相互的相应关系,斌刚在相应的类中加入相应的关联类的属性,这样在一端载入时才干载入到还有一端的对象。
关联中经常使用的主要有多对一、一对一、一对多和多对多。我们已经讨论了两种映射关系,接下来将会讨论一对多的关系。
一、单向一对多
1、基本配置
<pre name="code" class="java">package com.src.hibernate;import java.util.Set;public class Classes {private int id;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;}private String name;//Set支持延迟载入private Set students;public Set getStudents() {return students;}public void setStudents(Set students) {this.students = students;}
}
Classes对象中使用了set属性,可是仅仅是说明了延迟载入的属性。并没有为属性配置相应的对象,属性的对象是要在映射文件里来配置的。须要加入set标签,并在set标签中加入<one-to-many>标签,详细例如以下代码:
<?
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> <class name="com.hibernate.Classes" table="t_classes"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <set name="students"> <key column="classesid"></key> <one-to-many class="com.hibernate.Student"></one-to-many> </set> </class> </hibernate-mapping>
相应的Student对象中的代码和映射文件不须要什么特殊的配置,仅仅须要依照通常的写法编写就可以。详细的配置方法不再详述。非常easy。配置好后须要生成相应的SQL语句,将对象模型转化为关系模型时Hibernate生成相应的语句例如以下:
alter table t_student drop foreign key FK4B9075705E0AFEFE
drop table if exists t_classes
drop table if exists t_student
create table t_classes (id integer not null auto_increment, name varchar(255), primary key (id))
create table t_student (id integer not null auto_increment, name varchar(255), classesid integer, primary key (id))
alter table t_student add index FK4B9075705E0AFEFE (classesid), add constraint FK4B9075705E0AFEFE foreign key (classesid) references t_classes (id)
生成的相应的关系模型例如以下图:
2、基本操作
public void testSave2(){Session session=null;try{session=HibernateUtils.getSession();session.beginTransaction();Student student1=new Student();student1.setName("zhangsan");session.save(student1);Student student2=new Student();student2.setName("lisi");session.save(student2);Classes classes=new Classes();classes.setName("ClassOne");Set students=new HashSet();students.add(student1);students.add(student2);classes.setStudents(students);//能够成功保存数据//可是会发出多余的update语句来维持关系。由于是一对多的原因session.save(classes);session.getTransaction().commit();}catch(Exception e){e.printStackTrace();session.getTransaction().rollback();}finally{HibernateUtils.closeSession(session);}
}
那么执行上面的測试用例生成的相应的数据写入到数据库中后例如以下图:
package com.test.hibernate;import java.util.Iterator;
import java.util.Set;
import com.src.hibernate.*;
import junit.framework.TestCase;
import org.hibernate.Session;public class One2ManyTest extends TestCase {public void testLoad1(){Session session=null;try{session=HibernateUtils.getSession();session.beginTransaction();//获取主键为5的班级信息Classes classes=(Classes)session.load(Classes.class,5);//打印班级信息System.out.println("classes.name="+classes.getName());//设置学生集合。通过班级载入学生集合Set students=classes.getStudents();//迭代集合,打印集合中学生的信息for(Iterator iter=students.iterator();iter.hasNext();){Student student=(Student)iter.next();System.out.println("student.name="+student.getName());}session.getTransaction().commit();}catch(Exception e){e.printStackTrace();session.getTransaction().rollback();}finally{HibernateUtils.closeSession(session);}}
}
生成的对应的语句及信息例如以下语句:
Hibernate: select classes0_.id as id1_0_, classes0_.name as name1_0_ from t_classes classes0_ where classes0_.id=?
classes.name=ClassOne Hibernate: select students0_.classesid as classesid1_, students0_.id as id1_, students0_.id as id0_0_, students0_.name as name0_0_ from t_student students0_ where students0_.classesid=?
student.name=lisi student.name=zhangsan
结语
转载于:https://www.cnblogs.com/jhcelue/p/6971865.html
【Hibernate步步为营】--(一对多映射)之单向关联相关推荐
- Hibernate 一对一外键单向关联
[align=center][size=medium]Hibernate 一对一外键单向关联[/size][/align] 基于外键关联的单向一对一关联和单向多对一关联几乎是一样的.唯一的不同就是单向 ...
- hibernate一对一外键单向关联
与上篇相对应,还是client和address是一对一的外键关联关系,address表中的主键ID与client表中的外键CLIENTADDRESSID构成一对一外键关联关系. 表结构和sql语句就不 ...
- hibernate 多对一(Many-to-one)单向关联
多对一实例(Employee-Department) 1. E-R图: 2. 实体类: Department类: Java代码 package com.reiyen.hibernate.domai ...
- Hibernate一对一主键单向关联
2019独角兽企业重金招聘Python工程师标准>>> 模型user,address address对user进行外键关联,意思就是address的主键是由user的主键关联生成的, ...
- 【SSH进阶之路】Hibernate映射——一对一单向关联映射(五)
[SSH进阶之路]Hibernate基本原理(一) ,小编介绍了Hibernate的基本原理以及它的核心,采用对象化的思维操作关系型数据库. [SSH进阶之路]Hibernate搭建开发环境+简单实例 ...
- 【Hibernate步步为营】--(一对多映射)之双向关联
上篇文章讨论了单向关联的一对多映射,在一的一端维护双向的关系这种做法虽然能实现但是存在很多缺陷,首先生成很多多余的SQL语句,因为多的一端不维护关系,只有一的一端维护,在进行操作时一的一端会发出多余的 ...
- [置顶] Hibernate从入门到精通(十)多对多单向关联映射
上一篇文章Hibernate从入门到精通(九)一对多双向关联映射中我们讲解了一下关于一对多关联映射的相关内容,这次我们继续多对多单向关联映射. 多对多单向关联映射 在讲解多对多单向关联映射之前,首先看 ...
- 【Hibernate步步为营】--双向关联一对一映射具体解释(一)
一对一的映射在对象模型中是常常见到的,为了将对象模型转换为关系模型就必须在映射文件里进行配置,上篇文章讨论了一对一映射的单向关联的情况,重点是<one-to-one>标签的使用,须要在映射 ...
- Hibernate从入门到精通(十)多对多单向关联映射
上一篇文章Hibernate从入门到精通(九)一对多双向关联映射中我们讲解了一下关于一对多关联映射的相关内容,这次我们继续多对多单向关联映射. 多对多单向关联映射 在讲解多对多单向关联映射之前,首先看 ...
- Hibernate一对多单向关联和双向关联映射方法及其优缺点
一对多关联映射和多对一关联映射实现的基本原理都是一样的,既是在多的一端加入一个外键指向一的一端外键,而主要的区别就是维护端不同. 它们的区别在于维护的关系不同: 一对多关联映射是指在加载一的一端数据的 ...
最新文章
- Leangoo看板工具做单团队敏捷开发
- [Ubuntu 12.10] Openstack 多节点安装--前期准备网络拓扑
- 陆奇疫情之下最新思考:数字化的历史潮流在加速,送给创新者8个字2个维度...
- Ajax 网页异步调用
- Python-数学篇之计算方法的目录:
- java 统一编码_java GBK UTF-8编码与自动识别与统一(乱码问题)
- 超简单,带你学会多线程爬虫
- SilverLight中的数据绑定
- The engine “node“ is incompatible with this module
- 微信打飞机游戏(python)
- HEVC中四叉树划分详解
- LeaRun低代码开发平台 助推物联网应用快速落地
- 3000本英文名著PDF,TXT下载 300 M的文档资料
- delphi中通快递(支持快递查询、快递下单)
- 乘风破浪潮头立,扬帆起航正当时——韩国5G商用情况解析
- 【数据结构】单链表的实现
- 2021年英语六级翻译
- 佐治亚大学提供金融科技学位课程
- 隐私数据保护的两大途径
- wordpress插件_13个适用于WordPress的免费用户管理插件