当前位置:文档之家› Hibernate中的继承关系的映射实现

Hibernate中的继承关系的映射实现

Hibernate中的继承关系的映射实现
Hibernate中的继承关系的映射实现

Hibernate中的继承关系的映射实现

1、继承关系的描述

在域模型中,类与类之间除了关联关系和聚集关系,还可以存在继承关系,在下面的图中所示的域模型中,Company类和Employee类之间为一对多的双向关联关系(假定不允许雇员同时在多个公司兼职),Employee类为抽象类,因此它不能被实例化,它有两个具体的子类:HourlyEmployee类和SalariedEmployee 类。

由于Java只允许一个类最多有一个直接的父类,因此Employee类、HourlyEmployee类和SalariedEmployee类构成了一棵继承关系树。

2、OOP中的多态的概念---OOP中的多态

(1)OOP中的多态

在面向对象的范畴中,还存在多态的概念,多态建立在继承关系的基础上。简单地理解,多态是指当一个Java应用变量被声明为基类的类型时(如定义为Employee类时),这个变量实际上既可以引用其各个子类的实例(如HourlyEmployee类的实例,也可以引用SalariedEmployee类的实例)。

(2)代码示例

以下这段程序代码就体现了多态:

List employees= businessService.findAllEmployees();

Iterator it=employees.iterator();

while(it.hasNext())

{

Employee oneEmployee =(Employee)it.next();

if(oneEmployee instanceof HourlyEmployee)

{

System.out.println(oneEmployee.getName()+" "+((HourlyEmployee) oneEmployee).getRate());

}

else

{

System.out.println(oneEmployee.getName()+" "+((SalariedEmployee) oneEmployee).getSalary());

}

3、多态查询的应用

(1)多态查询

如果我们在BusinessService类的findAllEmployees()方法中通过Hibernate API从数据库中检索出所有Employee对象(基类),则将会在findAllEmployees()方法返回的集合中将包含Employee基类的各个子类的对象,也就是既包含有HourlyEmployee类的实例,同时也包含SalariedEmployee类的实例,这种查询被称为多态查询。

以上程序中变量oneEmployee被声明为Employee类型,它实际上既可能引用HourlyEmployee类的实例,也可能引用SalariedEmployee类的实例。

(2)多态关联

此外,从Company 类到Employee 类为多态关联,因为Company 类的employees 集合中可以包含HourlyEmployee 类和SalariedEmployee 类的实例。从Employee

类到Company 类不是多态关联,因为Employee 类的company

属性只会引用Company 类本身的实例。

数据库表之间并不存在继承关系,那么如何把域模型的继承

关系映射到关系数据模型中呢

4、实现继承关系的三种映射方式

在Hibernate 中对于继承映射到数据表有几种不同的策略,

各有适用的不同场合。下面以Person 基类以及其两个子类

Student 和Professor 类为例来说明。

(1)每个具体子类映射成单个数据库表----而抽象基类不参与映射------每个具体类一张表

Person 由于是抽象类,未

映射成数据库表;而Student 、

Professor 类映射为相应的表,

它们具有各自的主键。

● 优点

报表操作实现

简单:表中包含了具体子类的所有信息。

● 缺点

类的修改会导致相对应的表及其子类所对应表的更改

角色的更改会造成ID 的重新赋值(因为不同子类的ID 可能重复)

难以在支持多重角色时,保持数据的完整性。

这种策略适合在类层次结构上有一定数量的抽象类的情况下使用,同样有两种方式,一种是采用显式多态的方式,另一种是采用隐式多态的方式,显式多态采用的为 @hibernate.union-subclass 的方式,隐式多态则采用每个具体类的 PO 独立建表的策略,在它的映射文件中将看不出任何的和接口、抽象类的关系,同时对于抽象类,需要指明其 abstract=”true ”。

关系数据模型完全不支持域模型中的继承关系和多态。

(2)将整个类层次映射为单个数据库表-----单表策略

单表策略很容易理解,就是将基类、各个子类中所有的属性都放

至一张表中,这对于子类属性不多的情况非常有效----每个子类代表

表中由识别器列(discriminator column )标识的一行。

● 该方法的优点

实现简单;

支持多态——对象角色发生变化,或存在多重角色时;

报表操作实现简单:表中包含了所有信息。

● 该方法的缺点

增加类层次中的耦合,类层次中任何类的属性的增加会导致表的变更

如果在某个子类属性的修改错误会影响到整个层次结构,而不仅仅是该子类。

浪费了大量的数据库空间;

可能需要指明具体的角色。

这将失去数据库对Not Null 的约束,从数据完整性的角度看,问题很严重。

对关系数据模型进行非常规设计,在数据库表中加入额外的区分子类型的字段。通过这种方式,可以使关系数据模型支持继承关系和多态。同时在 Hibernate 中通常将子类定义为

的方式来实

现这个策略。

(3)每个类均映射为数据库表----继承关系树的每个类对应一个表

就是用外键关系来表示继承关系。在这种策略中,每一个子类,父类都会单独映射到一张表中。和第一种策略不同的是,这种策略的表中仅包含类中自己定义的那些属性(不包含继承下来的属性)。

为每一个类创建数据库表,表中包含特定于该类的属性和OID。下图显示了该方法,注意personOID 作为所有表的主键,它们之间是is-a的关系。

●优点

与面向对象的概念的一致性最好-----这种策略最大的好处就是关系模型完全标准化,关系模型和领域模型完全一致。

对多态的支持最好,对于对象所可能的充当的角色仅需要在相应的表中保存记录;

易于修改基类和增加新的类。

●缺点

数据库中存在大量的表

访问数据的时间较长

对报表的支持较差,除非定义视图。

在关系数据模型中用外键参照关系来表示继承关系。

以上每种映射方式都有利有弊,下面介绍每种映射方式的具体实现步骤,同时也还介绍了它们的适用范围。

5、有继承关系的各个子类的构造方法的设计要求

在此仅提醒一点,子类的完整构造方法不仅负责初始化子类本身的属性,还应该负责初始化从父类中继承的属性,例如以下是HourlyEmployee类的构造方法:

public class HourlyEmployee extends Employee

{

private double rate;

/** 完整构造方法*/

public HourlyEmployee(String name, double rate,Company company)

{

super(name,company);

this.rate=rate;

}

/** 默认构造方法*/

public HourlyEmployee() {}

……

}

Hibernate只会访问持久化类的默认构造方法,永远不会访问其他形式的构造方法。提供以上形式的完整构造方法,主要是为Java应用的编程提供方便。

409

Hibernate配置文件的DTD

Hibernate中有两个配置文件 映射文件Xxx.hbm.xml 映射文件的的文件头DTD文件内容:

配置文件hibernate.cfg.xml 配置文件的文件头DTD文件内容: org.hibernate.dialect.MySQLDialect com.mysql.jdbc.Driver jdbc:mysql://localhost/minmin?characterEncoding=gb2312 root minmin true create

Hibernate练习题

Hibernate&EJB考试试题 1、下面关于Hibernate说法正确的是()(选择两项) A)Hibernate是ORM的一种实现方式 B)Hibernate不要JDBC的支持 C)属于控制层 D)属于数据持久层 2、下面关于ORM的说法错误的是()(选择两项) A)对象关系映射,让现实中的对象同数据库的表产生映射(类与表产生映射) B)对象关系映射,让类同表产生关系 C)对象关系映射,让类同记录产生关系(类的实例与记录(表中的一行数据)产生关系) D)对象关系映射,让类中的属性同表中的列产生关系 3、下面关于Hibernate中Session的说法正确的是()(选择两项) A)Session是轻量级的,可以随意的创建和销毁 B)Session是重量级的,不能随意的创建和销毁 C)Session是线程安全的 D)Session不是线程安全的 4、在Hibernate中,以下()不属于session的方法 A、close() B. open() C. update() D. delete() 5、下面关于Hibernate中load和get方法说法正确的是() A)这两个方法是一样的,没有任何的区别 B)这两个方法不一样,load先找缓存,再找数据库

C)这两个方法不一样,get先找缓存,再找数据库 D)以上说法都不对 注:load()和get()都是先找缓存,再找数据库。 不同点是在检索时: load()是延迟检索,先返回代理对象,访问对象时在发出sql命令Get()是立即检索,直接发出sql命令,返回对象 6、在Hibernate中修改对象的说话错误的是() A)只能利用update方法来做修改 B)可以利用saveOrUpdate方法来做修改 C)可以利用HQL语句来做修改 D)不能利用HQL语句来修改 7、下面关于Hibernate中Transaction的使用说法正确的是()(选择两项) A)Transaction是可有可无的 B)Transaction在做查询的时候是可有可无的 C)Transaction在做修改的时候是可有可无的 D)Transaction在做修改的时候是必须的 8、使用Hibernate技术实现数据持久化时,下面()内容不在 Hibernate配置文件中配置(选择一项) A) 数据库连接信息 B) 数据库类型(dialect) C) show_sql参数 D) 数据库表和实体的映射信息

关系映射annotation

一对一(One-To-One) 使用@OneToOne注解建立实体Bean之间的一对一关联。一对一关联有三种情况:(1).关联的实体都共享同样的主键,(2).其中一个实体通过外键关联到另一个实体的主键(注意要模拟一对一关联必须在外键列上添加唯一约束),(3).通过关联表来保存两个实体之间的连接关系(要模拟一对一关联必须在每一个外键上 添加唯一约束)。 1.共享主键的一对一关联映射: @Entity @Table(name="Test_Body") public class Body { private Integer id; private Heart heart; @Id public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } @OneToOne @PrimaryKeyJoinColumn public Heart getHeart() { return heart; }

public void setHeart(Heart heart) { this.heart = heart; } } @Entity @Table(name="Test_Heart") public class Heart { private Integer id; @Id public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } } 通过@PrimaryKeyJoinColumn批注定义了一对一关联 2.使用外键进行实体一对一关联: @Entity @Table(name="Test_Trousers") public class Trousers { @Id public Integer id;

Hibernate3.6(开发必看)

1.Java对象持久化概述 1.1.应用程序的分层体系结构 1.1.1.基于B/S的典型三层架构 说明: 1,展现层:提供与用户交互的界面。 2,业务逻辑层:实现各种业务逻辑。 3,数据访问层:负责存放和管理应用程序的持久化业务数据。 1.1. 2.数据访问层与Hibernate在Java应用程序中的 角色 数据访问层(持久化层)封装了数据访问的细节,为业务逻辑层提供了面向对象的API。完善的持久化层应该达到的目标: 1,代码重用性高,可完成所有的数据访问操作。 2,如果需要的话,能够支持多种数据库平台。 3,具有相对独立性,当持久化层变化时,不会影响上层实现。 在数据访问层(持久化层)中可以使用Hibernate框架以实现要求,如下图所示:

1.2.软件模型 1.2.1.各种模型的说明 概念模型: 模拟问题域中的真实实体。描述每个实体的概念和属性及实体间关系。不描述实体行为。实体间的关系有一对一、一对多和多对多。。 关系数据模型: 在概念模型的基础上建立起来的,用于描述这些关系数据的静态结构。有以下内容组成:1,若干表 2,表的所有索引 3,视图 4,触发器 5,表与表之间的参照完整性

域模型: 在软件的分析阶段创建概念模型,在软件设计阶段创建域模型。 组成部分: 1,具有状态和行为的域对象。 2,域对象之间的关联。 域对象(domain object): 构成域模型的基本元素就是域对象。对真实世界的实体的软件抽象,也叫做业务对象(Business Object,BO)。域对象可代表业务领域中的人、地点、事物或概念。 域对象分为以下几种: 1,实体域对象:通常是指业务领域中的名词。(plain old java object,简单Java 对象)。 2,过程域对象:应用中的业务逻辑或流程。依赖于实体域对象,业务领域中的动词。如发出订单、登陆等。 3,事件域对象:应用中的一些事件(警告、异常)。 1.2.2.域对象间的关系 关联: 类间的引用关系。以属性定义的方式表现。

关系与映射学习指导重点

关系与映射学习指导 学习目标 理解笛卡尔积、二元关系、运算关系等概念,理解映射、满射、单射、双射等概念,理解有关定理,掌握有关定理的证明方法和有关的例题的处理方法。 内容提要 (一) 笛卡尔积: A ×B ={(a ,b )|a ∈A , b ∈B },注意(a ,b )为有次序的元素偶. 从集合A 到B 中的关系: A ×B 中的每一子集R 称为从A 到B 中的关系. 若(a ,b )∈R ,则称a 与b 是R -相关的,记作aRb . 关系R 的定义域: Dom (R )={a |存在b ∈B ,使aRb }(?A ). 关系R 的值域: Ran (R )={ b |存在a ∈A ,使aRb }(?B ). 关系R 的象集: R (A ~)={b |存在a ∈A ~,使得aRb }(?B ). 其中集合A ~ ?A . 关系R 的逆: 设R ?A ×B ,则B ×A 的子集1 -R ={(b ,a )|aRb }称为R 的逆. 关系的复合: S R ={(a ,c )|存在b ∈B ,使得aRb ,bSc },其中R ?A ×B ,S ?B ×C . 设A ,B ,C ,D 为集合;R ?A ×B ,S ?B ×C ,T ?C ×D ,则有关系的逆与复合运算满足: (1) 1 1)(--R =R ; (2) 1 )(-R S =1 -R 1 -S ; (3) T (S R )=(T S ) R . (二) 映射: F ∶X →Y ,即?x ∈X ,有唯一y ∈Y ,使得xFy . 映射F 的象: y =F (x ),即对于每一x ∈X ,使得xFy 成立的y . 映射F 的原象: )(1 y F -,即对于y ∈Y ,使得xFy 成立的x (x ∈X ). 映射的复合: (G F )(x )=G (F (x )),其中F ∶X →Y ,G ∶Y →Z . 满射: 若f (X )=Y ,则称f 为从X 到Y 上的满射. 单射: 若?1x ,2x ∈X , 1x ≠2x ,有f (1x )≠f (2x ),则称f 为从X 到Y 上的单射. 双射: 若f 即是单射又是满射的. 逆映射: 由y =f (x )确定的从Y 到X 的映射1 -f :Y →X ,其中f ∶X →Y 是双射. 1: 设f ∶X →Y ,A ,B ?Y ,则逆映射1 -f 满足 (1)1-f (A ∪B )=1-f (A )∪1-f (B ); (2)1-f (A ∩B )=1 -f (A )∩1 -f (B ); (3)1 -f (A -B )=1 -f (A )-1 -f (B ). 结论2: 设f ∶X →Y (1) 若f 是单射,则对于X 的任意子集A ,有1 -f (f (A ))=A . (2) 若f 是满射,则对于Y 的任意子集B ,有f (1 -f (B ))=B . (三) 运算 运算: 映射f : A ×B →C 是一个从A ×B 到C 中的运算.特别的,映射f : A ×A →A 是A 上的一个运算,并且称运算f 在A 上封闭. 若f (a ,b )=f (b ,a ), 则称运算f 满足交换律;若f (f (a ,b ),c )=f (a ,f (b ,c )), 则称运算f 满足结合律. f 的右零元e : ?a ∈A , 使f (a ,e )= a ; f 的左零元e : ?a ∈A , 使f (e ,a )= a ; f 的零元e : 既是f 的左零元,又是f 的右零元.

必修1映射经典习题(含答案)

映射例题答案: 例1、在下列对应中、哪些是映射、那些映射是函数、那些不是?为什么? 设A={1,2,3,4},B={3,5,7,9},对应关系是f(x)=2x+1,x属于A 设A={1,4,9},B+{-1,1,-2,2,-3,3}对应关系是‘A中的元素开平方’ 设A=R,B=R,对应关系是f(x)=x的3次方,x属于A 设A=R,B=R,对应关系是f(x)=2x的2次方+1,x属于A 解析:1、是一一映射,且是函数 2、不是映射(象是有且唯一) 3、是一一映射,且是函数 4、是映射,但不是函数,因为B中不是所有值在A中都有对应。 例2、设A={a,b,c},B={0,1},请写出两个从A到B的映射 从A到B的映射共有2^3=8个: (a,b,c)→(0,0,0); (a,b,c)→(0,0,1); (a,b,c)→(0,1,0); (a,b,c)→(1,0,0); (a,b,c)→(0,1,1); (a,b,c)→(1,0,1); (a,b,c)→(1,1,0); (a,b,c)→(1,1,1)。 例3、假设集合m={0 -1 1} n={-2 -1 0 1 2} 映射f:M→N 满足条件“对任意的x属于M ,x+f(x) 是奇数”,这样的映射有____个 ①当x=-1时,x+f(x)=-1+f(-1)恒为奇数,相当于题目中的限制条件“使对任意的x属于M,都有x+f(x)是奇数” f(-1)=-2,0,2 ②当x=0时,x+f(x)=f(0),根据题目中的限制条件“使对任意的x属于M,都有x+f(x)是奇数”可知f(0)只能等于-1和1 ③当x=1时,x+f(x)=1+f(1)恒为奇数 f(1)=-2,0,2 综上①②③可知,只有第②种情况有限制,所以这样的映射共有3×2×3=18个 例4、设集合A={-1,0,1} B={2,3,4,5,6 } 从A到B的映射 f满足条件:对每个X∈A 有 f(X)+X为偶数那么这样的映射f的个数是多少?

UML类图-关系数据库之间的映射

UML类图与关系数据库之间的映射策略 摘要:UML是目前面向对象程序设计中的一种标准的建模技术。在关系数据库系统的设计过程中,我们可先利用UML建立商业模型,然后将其映射成表。本文主要讨论如何将UML 类图中的类映射成表的策略。 关键词:UML 类表关系建模映射 一.概论 在关系数据库设计中,用来创建数据库逻辑模型的标准方法是使用实体关系模型(ER 模型)。ER模型的中心思想是:可以仅通过实体和它们之间的关系合理地体现一个组织的数据模型。但这样做似乎对描述一个组织的信息过于简单化,并且词汇量也远远不足。所以,迫切需要使用更加灵活、健壮的模型来代替ER模型。 标准建模语言UML是由世界著名的面向对象技术专家发起的,在综合了著名的Booch 方法、OMT方法和OOSE方法的基础上而形成的一种建模技术,它通过用例图、类图、交互图、活动图等模型来描述复杂系统的全貌及其相关部件之间的联系。UML可以完成ER 模型的所有建模工作,而且可以描述ER模型所不能表示的关系。 在UML中,类图主要用于描述系统中各种类及其对象之间的静态结构。在关系数据库领域中,类与表相对应。本文主要讨论将UML类图中的类及其对象映射成关系型数据库中的表的策略。 二.UML类图中的类映射成表的策略 UML中的类图主要由类及其关系组成,而类之间的关系又可以细分为: (1)泛化:在UML类图中,如果子类型的接口包括超类型的接口中的每个元素。则超类与子类之间构成泛化关系。泛化通常可以用继承或授权的方式实现。 (2)关联:在UML类图中,关联表示类的实例之间存在的某种关系。它通常可以有1对1、1对多和多对多等情形。 (3)聚集:在UML类图中,聚集描述了部分与整体之间的关系。 (4)组成:在UML类图中,组成由聚集演变而成,它表示一个部分对象仅属于一个整体,并且部分对象通常与整体对象共存亡。 下面结合例子,分别讨论在将类映射成表的过程中这些关系的实现技术。 假设,有一个电脑公司专门从事软件开发,其项目主要由项目开发部门承担,它们之间构成多对多的关联(即一个项目可由多个部门承担,而一个部门又可以承担多个项目的开发工作);项目开发部门由经理及一般职员组成,项目开发部门和组成人员之间构成聚集关系,而人(抽象类)又可以进一步和一般职员及经理两个子类之间构成继承关系;每个项目具有一定的属性,它们之间构成组成关系。 综上所述,其主要关系的UML类图如图1所示。

用MyEclipse如何自动生成hibernate的.hbm.xml文件

用MyEclipse如何自动生成hibernate的.hbm.xml文件(2010-07-29 17:36:01) 今天在网上看到很多人都不知道怎么用MyEclipse自动生成hibernate的.hbm.xml文件。我甚至看到有位兄弟竟然自己写出那个格式的文件来。首先我不得不佩服那位兄弟的记忆力。可是我这边有更直接的方法希望能对那些入门级别的人一点帮助! 在hibernate中,每个数据表对应的其实是一个实体类,每个实体类有一个对应的hbm.xml 配置文件和你匹配,myeclipse中其实有个MyEclipse Database Explorer视图,它提供了myeclipse与数据库直接连接的内置窗口,并且通过此窗口可以生成hibernate的mapping文件。 1.在项目上点击右键选择MyEclipse选项,为应用增加Hibernate特性. 2.在出现的配置窗口中,选中“Add Hibernate 2.1 libraries to project?”,然后设定存放Hibernate 库文件的目录为:/WEB-INF/lib 目录,默认会选择创建一个新的Hibernate配置文件hibernate.cfg.xml。 3.点击下一步,进入Hibernate数据库连接配置界面,在Connection Profile选项中直接选择在MyEclipse Database Explorer中配置的vipdata选项,然后就会自动生成其他的配置,可以选择“Copy JDBC Driver and add to classpath”,这样就会将JDBC驱动拷贝到WEB-INF/lib目录中。: 4.点击下一步,来创建Hibernate的SessionFactory类,这是一个简单的集中管理Hibernate 会话的工厂类,填写类的全名称。 5.点击完成,然后MyEclipse就会将Hibernate相关的jar包拷贝到lib目录下,同时会生成Hibernate的配置文件:hibernate.cfg.xml,和SessionFactory类。 现在要利用MyEclipse Database Explorer视图中的工具来生成Hibernate的映射文件。切换到MyEclipse Database Explorer视图,在表vipdata上点击右键,选择Create Hibernate Mapping.

Hibernate(V)——一对多与多对多关联关系映射(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"),而一方(教室类)无需做任何多方的定义。 注意;多方必须保留一个不带参数的构造器! import ; import ; import ; //班级类,在多对一关系中属于一的方,不持有其他多余的配置,反而是被多方持有

关系与映射典型例题解析

关系与映射典型例题解析 例1 设集合A = {1, 2, 3, 4}上的二元关系R = {(1, 1), (1, 2), (2, 4), (3, 1), (3, 3)},S = {(1, 3), (2, 2), (3, 2), (4, 4)},用定义求11112,,,,,----R S S R R S R R S . [思路] 求复合关系R S ,就是要分别将R 中有序对(a , b )的第2个元素b 与S 中的每个有序对(c , d )的第1个元素进行比较,若它们相同(即b =c ),则可组成R S 中的1个元素(a , d ),否则不能. 幂关系的求法与复合关系类似. 求关系R 的逆关系,只要把R 中的每个有序对的两个元素交换位置,就能得到1-R 中的所有有序对. 解 R S = {(1, 1), (1, 2), (2, 4), (3, 1), (3, 3)} {(1, 3), (2, 2), (3, 2), (4, 4)} = {(1, 3), (1, 2), (2, 4), (3, 3), (3, 2)} S R ={(1, 3), (2, 2), (3, 2), (4, 4)} {(1, 1), (1, 2), (2, 4), (3, 1), (3, 3)} ={(1, 1), (1, 3), (2, 4), (3, 4)} 2R =R R = {(1, 1), (1, 2), (2, 4), (3, 1), (3, 3)} {(1, 1), (1, 2), (2, 4), (3, 1), (3, 3)} ={(1, 1), (1, 2), (1, 4), (3, 1), (3, 2), (3, 3)} 1-R ={(1, 1), (1, 2), (2, 4), (3, 1), (3, 3)}1- ={(1, 1), (1, 3), (2, 1), (3, 3), (4, 2)} 1-S ={(1, 3), (2, 2), (3, 2), (4, 4)}1- = {(2, 2), (2, 3), (3, 1), (4, 4)} 1-S 1-R ={(1, 1), (1, 3), (2, 1), (3, 3), (4, 2)} {(2, 2), (2, 3), (3, 1), (4, 4)} ={(1, 1), (3, 1), (4, 2), (4, 3)} 注:由例1可知,关系的复合运算不满足交换率,即R S ≠S R . 例2 对于以下给定的集合A 、B 和关系f ,判断是否构成映射f :B A →. 如果是,试说明f :B A →是否为单射、满射或双射的. (1)A ={1, 2, 3, 4, 5},B ={6, 7, 8, 9, 10},f ={(1, 8), (3, 9), (4, 10), (2, 6), (5, 9)}; (2)A ={1, 2, 3, 4, 5},B ={6, 7, 8, 9, 10},f ={(1, 7), (2, 6), (4, 5), (1, 9), (5, 10)};

映射详解(经典)

课题:§1.2.2映射 教学目的:(1)了解映射的概念及表示方法,了解象、原象的概念; (2)结合简单的对应图示,了解一一映射的概念. 教学重点:映射的概念. 教学难点:映射的概念. 教学过程: 一、引入课题 复习初中已经遇到过的对应: 1.对于任何一个实数a,数轴上都有唯一的点P和它对应; 2.对于坐标平面内任何一个点A,都有唯一的有序实数对(x,y)和它对应; 3.对于任意一个三角形,都有唯一确定的面积和它对应; 4.某影院的某场电影的每一张电影票有唯一确定的座位与它对应; 5.函数的概念. 二、新课教学 1.我们已经知道,函数是建立在两个非空数集间的一种对应,若将其中的条件“非空数集”弱化为“任意两个非空集合”,按照某种法则可以建立起更为普通的元素之间的对应关系,这种的对应就叫映射(mapping)(板书课题). 2.先看几个例子,两个集合A、B的元素之间的一些对应关系 (1)开平方; (2)求正弦 (3)求平方; (4)乘以2; 3.什么叫做映射? 一般地,设A、B是两个非空的集合,如果按某一个确定的对应法则f,使对于集合A中的任意一个元素x,在集合B中都有唯一确定的元素y与之对应,那么就称对应f:A→B为从集合A到集合B的一个映射(mapping). 记作“f:A→B” 说明: (1)这两个集合有先后顺序,A到B的射与B到A的映射是截然不同的.其

中f表示具体的对应法则,可以用汉字叙述. (2)“都有唯一”什么意思? 包含两层意思:一是必有一个;二是只有一个,也就是说有且只有一个的意思。4.例题分析:下列哪些对应是从集合A到集合B的映射? (1)A={P | P是数轴上的点},B=R,对应关系f:数轴上的点与它所代表的实数对应; (2)A={ P | P是平面直角体系中的点},B={(x,y)| x∈R,y∈R},对应关系f:平面直角体系中的点与它的坐标对应; (3)A={三角形},B={x | x是圆},对应关系f:每一个三角形都对应它的内切圆; (4)A={x | x是新华中学的班级},B={x | x是新华中学的学生},对应关系f:每一个班级都对应班里的学生. 思考: 将(3)中的对应关系f改为:每一个圆都对应它的内接三角形;(4)中的对应关系f改为:每一个学生都对应他的班级,那么对应f:B A是从集合B到集合A的映射吗? 5.完成课本练习 三、作业布置 补充习题

如何根据hibernate的实体类和实体类配置文件生成数据库的表

网络地址: 主题:如何根据hibernate的实体类和实体类配置文件生成数据库的表 内容部分 [c-sharp]view plaincopyprint? 1. 4. 5. 6. jdbc:mysql://12 7.0.0.1/lianxi 7. com.mysql.jdbc.Driver 8. root 9. root 10. org.hibernate.dialect.MySQLDialect 11. true 12. update 13. 14. 15. 16. 17. 18. 19.

各种关系及对应的关联词

(一)并列关系 几个分句分别叙说有关联地几件事情、几种情况,或者说明同一事物地几个方面.分句间地关系是平列地,或者是相对待地.常用地关联词语是:资料个人收集整理,勿做商业用途 也,又,还,同时, 同样 既……也(又)也……也又……又一方面……(另)一方面 一边……一边有时……有时一会儿……一会儿 不是……而是是……不是 ①它既不需要谁来施肥,也不需要谁来灌溉. ②小刘一面擦汗,一面反驳. ③这武器不是机关枪,而是马克思列宁主义. (二)承接关系 几个分句按顺序叙述连续发生地动作或相关地事情.常用地关联词语是: 就、便、又、才、于是、然后、 接着、跟着、终于 首先……然后起先……后来 ①孔乙己知道自己不能和他们谈天,便只好向孩子们说话. ②文章必须不断修改,然后拿去发表. ③我先是诧异,接着是很不安. (三)选择关系 几个分句说明可供选择地事项;或者说出选定地一种,舍弃另一种.常用地关联词语是: 或或是或者或者……或者是……还是 不是……就是要么(要就是)……要么(要就是) 与其……不如(无宁) 宁可……也不 ①人地死,或重于泰山,或轻于鸿毛. ②不是在沉默中爆发,就是在沉默中死亡. ③文章与其长而空,倒不如短而精. ④战士们宁可牺牲生命,也不放弃阵地. (四)递进关系 后面地分句比前面地分句意思更进一层,一般由轻到重,由小到大,由浅到深,由易到难. 常用地关联词语是: 不但(不仅、不只、不光)……而且(还) 而且并且况且何况甚至 尚且……何况(更不用说)别说(不要说)……连(就是) ①这种桥不但形式优美,而且结构坚固. ②邮局离得很远,而且不通公共汽车. ③别说不让她去,连迟去一会儿都不乐意呢. (五)因果关系 几个分句,有说明原因地,有说明结果地.一般先说因,再说果;也有先说果,再说因地.常用地关联词语是: 因为……所以既然(既)……那么(就)由于……就(所以)

hibernate关系映射注解配置

1. Hibernate Annotation关系映射有下面几种类型: 1)一对一外键关联映射(单向) 2)一对一外键关联映射(双向) 3)一对一主键关联映射(不重要,有需要看下文档即可) 在实际中很少用,使用注解@PrimaryKeyJoinColumn 意思是说,我的主键去参考另外一张表中的主键,作为我的主键,但是在我测试使用 注解一对一主键关联映射,在生成表的时候,数据库中并没有生成关联,使用XML 映射可以生成。Annotation注解一对一主键关联映,有些bug。不过没空去研究它。 因为在实际开发中一对一很少用。在实际开发中我机会没有用过,主键关联就更少了 4)多对一关联映射(单向) 5)一对多关联映射(单向) 6)一对多关联映射(双向) 7)多对多关联映射(单向) 8)多对多关联映射(双向) 2.介绍各种映射用法 1)一对一外键关联映射(单向)Husband ---> Wife public class Husband{ private Wife wife; @OneToOne(cascade=CascadeType.ALL) @JoinColumn(name="wife_id",unique=true) public Wife getWife(){…} … } public class Wife{ } 一对一外键关联,使用@OneToOne,并设置了级联操作 @JoinColum设置了外键的名称为wife_id(数据库字段名),如果不设置,则默认为另一类的属性名+ _id 外键的值是唯一的(unique),不可重复,与另一类的主键一致 2)一对一外键关联映射(双向)Husband <---> Wife public class Husband{ private Wife wife; @OneToOne(cascade=CascadeType.ALL) @JoinColumn(name="wife_id",unique=true) public Wife getWife(){…} ... } public class Wife{ private Husband husband; @OneToOne(mappedBy="wife",cascade=CascadeType.ALL) public Husband getHusband(){…} ... } 一对一双向关联关系,使用@OneToOne 注意:需要加上mappedBy="wife",如果不加上的话,Wife也会生成一个外键(husband_id)。mappedby="wife"需要指向与他关联对象的一个属性(即Husband类里面的wife属性),这里的会在Husband表里面生成个外键wife_id字段,而Wife表里则不会生成。这里Husband作为维护端即主

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

利用轻量对象关系映射技术Hibernate提高开发效率 Enhancing Development Efficiency with Hibernate a Lightweight Object/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 Permanence 0 引言 随着internet的发展,应用服务程序已经从集中式、C/S模式过渡到B/S、分布式模式;无论是用户或是供应商都迫切希望缩短开发周期、提高开发效率,Hibernate应运而生。 1 Hibernate简介 Hibernate是一个面向Java环境的对象/关系数据库映射工具。对象/关系数据库映射(Object/Relational Mapping , ORM)这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型中去。 Hibernate不仅提高Java类到数据库的映射,还提供数据查询和获取数据的方法。Hibernate在英语中的意思是“冬眠”,顾名思义它使得商务逻辑的开发和数据库最大程度地分离,可以大幅度减少开发时人工使用SQL和JDBC处理数据的时间。Hibernate的目标是解放开发者通常与数据持久化相关的编程任务的95%。对于那些在基于Java的中间层应用中,它们实现面向对象的业务模型和商业逻辑的应用,Hibernate是很有用的。 图1是Hibernate的体系结构图,从图中可以Array看到,系统为3层B/S模式,应用程序在客户端运 行将持久化的对象交由Hibernate。Hibernate通过 properties属性设置和XML Mapping实现商务逻 辑,调用和存储低层数据库后将返回的结果送给 客户端。 Hibernate对每一种数据库都有对应的 Dialect进行操作优化,从而提高它在各种情况 下的效率。目前,它的版本为3.0、支持的数据 库有Oracle、DB2、MySQL、PostgreSQL、Sybase,Interbase、Pointbase、Microsoft SQL Server、

一函数与映射的基本概念

一、函数与映射的基本概念 一、基本概念 1.函数的定义: 设A 、B 是非空的数集,如果按某个确定的对应关系f ,使对于集合A 中的每一个元素x ,在集合B 中都有唯一的元素y 和它对应,那么就称这样的对应“f :A →B ”为从集合A 到B 的一个函数,记作y =f (x ),x ∈A ,其中x 叫做自变量.x 的取值范围A 叫做函数的定义域;与x 的值相对应的y 的值叫做函数值,函数值的集合C={y|y = f (x ),x ∈A }叫做函数的值域)(B C ?. 函数符号y =f (x )表示“y 是x 的函数”,或简记为f (x ).这里的“f ”即对应法则,它确定了y 与x 的对应关系.从函数概念看,“定义域、值域和对应法则”是构成函数的三个要素,其中,“定义域和对应法则”是两个关键性要素,定义域和对应法则一旦确定,函数的值域也随之确定. 2、对应法则 是指y 与x 的对应关系,它含有两层意思,一是对应的过程(形式),即由x 求出y 的运算过程,一般体现在函数的解析表达式中;二是运算的结果(本质),即y 的值,两个对应法则是否相同,要看对于同一个自变量的值所得到的函数值是否相同,有时形式上不同的对应法则本质上是相同的。例如:x x x y x y ++=+=2 2 cos sin 1与的对应法则是相同的。 3、同一个函数 两个函数当且仅当定义域和对应法则二者均相同时才表示同一个函数,而值域相同是两函数为同一函数的必要非充分条件. 4、变换字母 在函数的定义域及对应法则不变的条件下,用不同的字母表示自变量及对应法则,这对于函数 本身并无影响,比如f (x )=x 2+1,g (t )= t 2+1,都表示同一函数. 5、区间及其表示方法. 区间是数学中常用的表示数集的术语与符号.设b a R b a <∈,、, 规定闭区间: [a ,b ]={}b x a x ≤≤|,开区间:(a ,b )={}b x a x <<|, 半开半闭区间:(a ,b ]={}b x a x ≤<|,[a ,b )={}b x a x <≤|. 其中a 、b 分别为区间的左端点、右端点,b -a 为区间长度. 符号+∞读作正无穷大,﹣∞读作负无穷大,它们都不是一个具体的数. 用+∞或-∞作为区间的端点,表示无穷区间,并且只能用开区间的形式. 如:{}a x x a >=+∞|),(,{}}|),(b x x b <=-∞,R =+∞-∞),( 6.映射的概念: 映射是两个集合间的一种特殊的对应关系,即若按照某种对应法则f ,对于集合A 中的任一元素,在集合B 中都有唯一的元素与之对应,那么这样的对应(包括集合A 、B 和对应法则f )就叫做集合A 到集合B 的映射,记作f :A →B .在映射f :A →B 中,若A 中元素a 与B 中元素b 对应,则b 叫做a 的象,a 叫做b 的原象.因而,映射可以理解为“使A 中任一元素在B 中都有唯一象”的特殊对应(即单值对应).如果映射f :A →B 满足①A 中不同元素在B 中有不同的象;②B 中任一元素均有原象,那么这个映射就是A 到B 上的一一映射. 7、映射与函数的关系 函数是映射,但映射不一定是函数。由映射的概念可知,函数本质上是定义在两个非空数集

Hibernate映射解决问题

Hibernate映射解决问题 做Hibernate映射已经做了五天了,期间遇到了不少错误,有的时候错误很细小,很难发现.现在就来总结一下,常见的错误,有的也是在网上搜了看到的! 第一种问题:Could not execute JDBC batch update 网上说有两种可能: 1.因为Hibernate Tools(或者Eclipse本身的Database Explorer)生成*.hbn.xml工具中包含有catalog="***"(*表示数据库名称)这样的属性,将该属性删除就可以了 2.估计是你的列名里面有关键字的原因吧,命名列的时候不要单独使用date,ID...这种关键字 但是,我觉得他写得不完全啦!我遇到的就不是两种原因,而是List映射时,对应表的索引项没有设成主键,所以就出错了.虽然找了蛮长时间的.同样, 它也会出现Duplicate entry '1' for key 1的错误啦! 第二种问题(归纳下): 1.Caused by: org.dom4j.DocumentException: Invalid byte 2 of 2-byte UTF-8 sequence. Nested exception: Invalid byte 2 of 2-byte UTF-8 sequence. 如果出现这行错误说明你的XML配置文件有不规范的字符,检查下。 2.net.sf.hibernate.MappingException: Error reading resource: hibernate/Hello_Bean.hbm.xml 如果出现这行错误说明你的hibernate的XML配置文件有错 3.net.sf.hibernate.MappingException: Resource: hibernate/Hello_Bean.hbm.xml not found 如果出现这行错误说明hibernate的XML配置文件没有找到,你应该把XML文件放在与你的类文件同个目录下,一般跟同名的java持久化类放在一起,也就是跟Hello_Bean.class类文件一起。4.net.sf.hibernate.PropertyNotFoundException: Could not find a setter for property name in class hibernate.Hello_Bean 如果出现这行错误说明你的xml文件里设置的字段名name的值与Hello_Bean.Java类里的getXXX 或setXXX方法不一致。 5.net.sf.hibernate.HibernateException: JDBC Driver class not found: org.gjt.mm.mysql.Driver:没有找到数据库驱动程序 6.The database return no natively generate indentity value。主键没有添加增量 7.net.sf.hibernate.PropertyValueException:not-null property references a null or transient value:com.pack.Rordercontent. 异常产生原因:Rordercontent对象的非空属性Rordertable引用了一个临时对象。 8.net.sf.hibernate.TransientobjectException:objiect references an unsaved transient instance –save the transient instance before flushing: com.pack.Rordertable 持久化对象的某个属性引用了一个临时对象Rordertable https://www.doczj.com/doc/fb14369451.html,.sf.hibernate.MappingException

相关主题
文本预览
相关文档 最新文档