hibernate关联映射总结

合集下载

Hibernate(6)—— 一对多和多对多关联关系映射(xml和注解)总结

Hibernate(6)—— 一对多和多对多关联关系映射(xml和注解)总结

Hibernate(6)——一对多和多对多关联关系映射(xml和注解)总结涉及的知识点总结如下:∙One to Many 映射关系o多对一单向外键关联(XML/Annotation)o一对多单向外键关联(XML/Annotation)o懒加载和积极加载o一对多双向外键关联(XML/Annotation)∙Many to Many 映射关系o多对多单向外键关联(XML/Annotation)o多对多双向外键关联(XML/Annotation)o set的inverse元素详解∙问题小结∙关联关系的优缺点多对一单向外键关联关系注意多对一关联是多方持有一方的引用。

看一个例子,去淘宝购物,那么一个淘宝用户可以对应多个购物订单,如图所示:多的一方是Orders,持有一方的引用,也就是Users,而在Users中无需作任何定义,从订单到用户的关系是单向多对一关联。

对应数据库就是:还有比如说学生和班级的关系,多个学生可以属于同一个班级,这就是从学生到班级也是典型的单向多对一关系,看代码实现:基于注解的多对一单向外键关联:单向多对一关联中,多方需要持有一方的引用,那么多方(学生类)需要额外配置,需要对持有的一方引用使用注解@ManyToOne (cascade={CascadeType.ALL}, fetch=FetchType.EAGER),设置为级联操作和饥渴的抓取策略,@JoinColumn(name="cid"),而一方(教室类)无需做任何多方的定义。

注意;多方必须保留一个不带参数的构造器!importjavax.persistence.Entity;importjavax.persistence.GeneratedValue;importjavax.persistence.Id;//班级类,在多对一关系中属于一的方,不持有其他多余的配置,反而是被多方持有@Entitypublic class ClassRoom {private intcid;//班级编号private String cname;//班级名称// 自动增长的主键@Id@GeneratedValuepublicintgetCid() {returncid;}public void setCid(intcid) {this.cid = cid;}public String getCname() {returncname;}public void setCname(String cname) {ame = cname;}}View Code一方——班级类无需做多余的定义,下面是多方——学生实体和配置:importjavax.persistence.CascadeType;importjavax.persistence.Entity;importjavax.persistence.FetchType;importjavax.persistence.GeneratedValue;importjavax.persistence.Id;importjavax.persistence.JoinColumn;importjavax.persistence.ManyToOne;//学生实体类,属于多对一的多方,持有班级(一方)的引用@Entitypublic class Students {private intsid; //编号private String sname; //姓名private ClassRoom classroom;//学生班级//注意:多方一定要显式的定义不带参数的构造方法public Students() {}public Students(String sname){this.sname = sname;}// 多方使用注解:@ManyToOne// fetch=FetchType.EAGER,急加载,加载一个实体时,定义急加载的属性会立即从数据库中加载。

Java企业级应用开发:EJB和Hibernate

Java企业级应用开发:EJB和Hibernate

Java企业级应用开发:EJB和Hibernate第一章:介绍1.1 Java企业级应用开发概述Java企业级应用开发是指使用Java编程语言开发大型、复杂的企业级应用程序。

这些应用程序通常需要处理大量的数据和复杂的业务逻辑,而且需要满足高性能、可扩展性、可靠性和安全性等要求。

1.2 EJB和Hibernate的作用EJB(Enterprise JavaBean)是一种用于开发分布式应用程序的Java组件模型,它提供了事务管理、远程访问、消息传递等功能,可以帮助开发人员更方便地构建可重用的企业级组件。

Hibernate是一个开源的对象关系映射(ORM)框架,它可以将Java对象和关系数据库中的数据进行映射,使开发人员可以使用面向对象的方式来操作数据库,大大简化了开发流程。

本章将对EJB和Hibernate进行详细介绍,包括它们的特点、优势和适用场景等。

第二章:EJB2.1 EJB的概述EJB是一种Java组件模型,它定义了一套规范,用于开发分布式应用程序。

EJB 提供了事务管理、远程访问、消息传递等功能,可以帮助开发人员更方便地构建可重用的企业级组件。

2.2 EJB的特点和优势EJB具有以下特点和优势:(1)分布式事务管理:EJB提供了容器管理的事务机制,可以确保分布式应用程序中的事务一致性。

(2)远程访问:EJB可以通过RMI(Remote Method Invocation)协议实现远程访问,使得应用程序可以跨越网络边界进行通信。

(3)消息传递:EJB支持JMS(Java Message Service)协议,可以实现异步消息传递,提高系统的响应速度和可靠性。

(4)安全性:EJB提供了基于角色的访问控制机制,可以对应用程序的资源进行细粒度的权限控制。

2.3 EJB的适用场景EJB适用于需要面对复杂业务逻辑、大量数据处理和分布式部署的企业级应用程序。

例如,电子商务系统、银行系统、物流管理系统等。

hibernate核心,一对多,多对多映射讲解,看了就完全搞明白了

hibernate核心,一对多,多对多映射讲解,看了就完全搞明白了
• 增加山南区下属的三个街道:“和平路” 、“八一路”和“五四大道”
在many一方删除数据1
• 删除“五四大道”
inverse设为true,由many一方删除 从one一方去“删除”, Hibernate只是执行了 问题出在配置文件上 update语句。还是未删 没有配置set节点的inverse属性 除成功! 根本没有执行 Delete语句,数据 没有被删除!
– 配置Hibernate多对多关联,实现某OA系统项 目和人员对照关系的管理
本章目标
• 掌握单向many-to-one关联 • 掌握双向one-to-many关联 • 掌握many-to-many关联
实体间的关联
• 单向多对一
tblJd.getQx().getQxname();
• 单向一对多
TblJd jd = (TblJd)tblQx.getJds().get(0); jd.getJdname(); tblQx.getJds.add(jd);
小结
• 在租房系统中,房屋信息(Fwxx)与用户 (User)间也是多对一关系。如何配置映 射文件,使之可以通过下面的代码输出房 屋信息和发布该信息的用户名称? Fwxx fwxx = (Fwxx)super.get(Fwxx.class,1);
System.out.println( fwxx.getTitle() + "," + fwxx.getUser.getUname());
inverse是“反转”的意思,表示关联关系的控制权。 为true,表示由对方负责关联关系的添加和删除; 执行了delete语句, 为false,表示由自己负责维护关联关系。 删除成功
• 在many一方删除数据的正确做法:

Hibernate中关联关系映射策略研究与实现

Hibernate中关联关系映射策略研究与实现
表示 层 务逻辑层打交道
业务逻辑层
l 接收表示层提交的表单数据, 进行相应的业务逻辑处理 l I处理通过持久层取得的原始数据,结果再送入持久层处理 I l 将业务逻辑层处理的结果反馈给表示层
业务逻辑层 持久层打交道

进一步提高软件开发 的效率以及 降低软件开发的难 度, 基于 We b的应 用 通 常 采用 四层 式 的软件 开发 框 架, 分层降低了系统各部分之间的耦合程度 , 增加了 系统 的可 维护 性和可 扩展 性L 。 2 ]
l 概

随着计算机软件开发技术 的快速发展 , b应 We 用程 序 的体 系结 构也 由单层 向两层 、 三层甚 至更 多层 次 的方 向发展 , e 用 程 序 通 常 涉 及 到 对 大 型 数 W b应 据库 的访 问操作 。两 层 的开 发模 型实 现 了应 用层 与 数 据 层 的分 离 , 应用 层 包括 用 户 界 面 、 务逻 辑 和数 业 据持久 化等 功 能 , 据层用 于保存 需要 进行 持久 化 的 数 数 据 。两层 模 型 中, 业务 逻 辑 、 据 持 久化 以及 用 将 数 户界 面都集 中在 应用 层 , 得 应 用 层 过 于臃 肿 , 使 因此 提 出了三层 的软 件开 发架构 。三 层架 构 中 , 应用 层划 分为 表示层 和业 务 逻 辑层 , 就 是 通 常所 说 的 MVC 这 ( dl Mo e—Vi e w—C n rl模 型 一视 图 一 控 制 ) 式 o to, 模 的系统 开发 架构 , MVC 模 式 的 广 泛 应 用 , 生 了 催 MVC框架 _ 。三层 模 型 虽 然 实 现 了业 务 逻 辑 和 用 1 ]
Hient brae的配 置 文 件 可 以使 用 hb raecg ient. f.

hibernate最精细总结 java

hibernate最精细总结 java

Hibernate总结注:重点讲解关联映射总结人:张焕邮箱:zhang343489603@欢迎交流讨论。

目录1)核心接口简介2)Hibernate版本更新情况3)Hibernate关联映射4)简单属性查询5)Hibernate与延迟加载6)hibernate 中Criteria 的使用介绍7) Hibernate程序性能优化Hibernate优点:1、封装了jdbc,简化了很多重复性代码。

2、简化了DAO层编码工作,使开发更对象化了。

3、移植性好,支持各种数据库,如果换个数据库只要在配置文件中变换配置就可以了,不用改变hibernate代码。

4、支持透明持久化,因为hibernate操作的是纯粹的(pojo)java类,没有实现任何接口,没有侵入性。

所以说它是一个轻量级框架。

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web 应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

1)核心接口简介:Hibernate的核心接口一共有6个,分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。

这6个核心接口在任何开发中都会用到。

通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。

下面对这6个核心接口分别加以介绍。

Session接口Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句。

)。

但需要注意的是Session对象是非线程安全的。

同时,Hibernate的session不同于JSP应用中的HttpSession。

关系映射

关系映射
单向关联Person----->IdCard
T_person --------------------------------------Id name --------------------------------------1 张三 2 李四 T_idCard --------------------------------------Id cardNo --------------------------------------1 1234567890 2 2345678901
One2One fk1
<class name="com.sinoest.hibernate.IdCard" table="t_idCard"> <id name="id"> <generator class="native"/> </id> <property name="cardNo"/> </class>
many2one
public class User { private int id; private String name; private String name; private Group group; public int getId() { return id; } …. } } public int getId() { return id; } public void setId(int id) { this.id = id; } …. Public class Group{ prlass Classes { private int id; private String name; private Set students; public int getId() { return id; } public void setId(int id) { this.id = id; } ……. public class Student { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; }

第8章 NHibernate高级数据映射和查询

第8章 NHibernate高级数据映射和查询

第8章 NHibernate高级数据映射和查询在NHibernate中,实体映射以及高级查询是两个比较重要的模块。

实体映射用来实现代码对象与数据库对象的复杂映射关系。

而高级查询中,通过查询规则和过滤等接口,实现对数据的查询操作。

8.1 实体映射实体映射是指多个对象或者多个数据表之间的一种关系。

在NHibernate中,实体映射包括一对一、多对一以及多对多三种映射模式。

本节中通过实例逐一介绍这三种实体映射。

在各个实例中,需要创建对于映射的数据表。

注意:在NHibernate中,不同的业务场景需要采用不同的映射方案,而对于不同的映射,配置文件也会相应采用不同的配置键。

【本节数据库建库脚本参考:\示例代码\C12\CreateTable.sql】8.1.1 一对一映射在数据库中的两个表中,通过某一字段进行关联,该字段是两个表的主键。

说明:一对一的映射关系如人员表和人员信息详细表信息,人员主表介绍了人的基本信息,而人员子表信息介绍了一些辅助的信息。

但二表都是描述相同的一个实体。

本节实例中,通过人员基本信息表和人员辅助信息表来描述一对一的映射关系。

对应的数据库表之间的关系如图8.1所示。

图8.1 一对一映射数据表关系下面通过实例介绍如何在程序中实现一对一的映射关系。

【本节示例参考:\示例代码\C12\NHMappingOne2One】(1)创建实例数据库和实例表,对应的SQL创建脚本如下代码所示。

说明:该SQL脚本是用来创建后续几种映射对应的数据库表结构,由于映射需要针对不同的业务场景,所以下面表结构会根据不同映射设计出来的。

USE master;GOIF DB_ID (N'NHDemo') IS NOT NULLDROP DATABASE NHDemo;GOCREATE DATABASE NHDemo;GOUSE [NHDemo]GO/****** Object: Table [dbo].[Person] Script Date: 07/13/2007 13:32:55 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOSET ANSI_PADDING ONGOCREATE TABLE [dbo].[Person]([PersonId] [int] IDENTITY(1,1) NOT NULL,[Name] [varchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED(ASC[PersonId])WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]) ON [PRIMARY]GOSET ANSI_PADDING OFFUSE [NHDemo]GO/****** Object: Table [dbo].[PersonDetailInfo] Script Date: 07/13/2007 13:33:02******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGOCREATE TABLE [dbo].[PersonDetailInfo]([PersonId] [int] NOT NULL,[Address] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,CONSTRAINT [PK_PersonDetailInfo] PRIMARY KEY CLUSTERED([PersonId] ASC)WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]) ON [PRIMARY]GO ALTER TABLE [dbo].[PersonDetailInfo] WITH CHECK ADD CONSTRAINT[FK_PersonDetailInfo_Person] FOREIGN KEY([PersonId]) REFERENCES [dbo].[Person] ([PersonId])GO ALTER TABLE [dbo].[PersonDetailInfo] CHECK CONSTRAINT [FK_PersonDetailInfo_Person](2)创建一个控制台项目,命名为NHMappingOne2One 。

利用轻量对象关系映射技术Hibernate提高开发效率

利用轻量对象关系映射技术Hibernate提高开发效率

利用轻量对象关系映射技术Hibernate提高开发效率 Enhancing Development Efficiency with Hibernate a LightweightObject/Relational Mapping Technology谢挺 周维民(上海大学机电工程与自动化学院,上海 200072)摘 要 Hibernate是一种轻量对象关系映射技术。

文章通过实例,介绍了Hibernate的一些关键特性,并阐述了该技术的一些局限性。

关键词 Hibernate 对象关系映射企业级JavaBeans 持久化Abstract Hibernate is a lightweight Object/Relational Mapping(ORM) technology. Some key features of Hibernate are illustrated, and some limits of this technology are expounded.Keywords Hibernate Object/Relational Mapping (ORM) EJB Permanence0 引言随着internet的发展,应用服务程序已经从集中式、C/S模式过渡到B/S、分布式模式;无论是用户或是供应商都迫切希望缩短开发周期、提高开发效率,Hibernate应运而生。

1 Hibernate简介Hibernate是一个面向Java环境的对象/关系数据库映射工具。

对象/关系数据库映射(Object/Relational Mapping , ORM)这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型中去。

Hibernate不仅提高Java类到数据库的映射,还提供数据查询和获取数据的方法。

Hibernate在英语中的意思是“冬眠”,顾名思义它使得商务逻辑的开发和数据库最大程度地分离,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Hibernate 关联映射配置总结
数据库表的自动生成代码
public class Util {
public static void main(String[] args) {
Configuration cfg = new Configuration().configure();
SchemaExport se = new SchemaExport(cfg);
se.create(true, true);
}
}
1.many to one
user(人) 多group(组)
需要再多的一方配置
dto配置
private Group group; //和下面的name要一致
映射文件配置
Column –》自动生成的表的列名cascade –》级联<many-to-one name="group"column="groupId"class="dto.Group" cascade="all"></many-to-one>
2.1one to many (单向)
classes -> 一 students
需要再一的一方配置
Dto配置
private Set student;//因为students是多的一方,所以要用集合,这里用set 映射文件配置
<set name ="student">
<key column ="classId"></key >
<one-to-many class ="dto.Students"/> </set >
2.2 one to many (双向)
classes -> 一 students dto 配置
映射文件配置
3.1
one to one (主键单向)
dto 配置 映射文件配置
3.2one to one (主键双向)
dto配置
映射文件配置
3.3one to one (唯一外键单向) dto配置
映射文件配置
3.4one to one (唯一外键双向)
dto配置
映射文件配置
4.1 many to many (单向)
Dto配置
映射文件配置
4.2 many to many (双向) Dto配置
映射文件配置。

相关文档
最新文档