文档库 最新最全的文档下载
当前位置:文档库 › Hibernate中如何确定两张表之间的实体映射关系

Hibernate中如何确定两张表之间的实体映射关系

Hibernate中如何确定两张表之间的实体映射关系
Hibernate中如何确定两张表之间的实体映射关系

Hibernate 中两张表的关系有:单边一对多、单边多对一、单边多对多、单边一对一、双边一度多-多对一、双边多对多、双边一对一。但是如何判断两个表示上述何种关系呢?? 假设:存在两张表——表A 、表B ,分别属于M (“一”或“多”)、N (“一”或“多”) 步骤:

1、 确定“单边”还是“对边”

条件一:表A 中有表B 的属性

条件二:表B 中有表A 的属性

(1) 只用条件一或者条件二成立——“单边”

(2) 条件一和条件二同时成立——“双边”

图1

图2

图3

图1和图2属于“单边”,图3属于表3 2、 确定“谁对谁”(只适用于“单边”)

根据表格中的箭头指向判断“谁对谁”,箭尾是第一个“谁”,箭头是第二个“谁”, 如:图1是“M 对N ”;图2是“N 对M ”

注:其中的M 和N 属于“一”和“多”中的一种

3、 确定“一”还是“多”

条件一:A 中可有多个B

条件二:B 中可有多个A

只有条件一成立:A ——“一”;B ——“多”

只有条件二成立:A ——“多”;B ——“一”

条件一和条件二都成立:A 、B ——“多”

表A

B 表A

B 表A

B

下面举例如下:(例子适用于举例,可能不适合真实情况)

1)单边一对多

表格A——邮件:id,theme

表格B——人:id,name,emails(包含所有的邮件id)

说明:A中只是单纯的记录了所有的邮件,B中记录了人的基本信息,并且包含了一个集合属性,即所有的邮件id(到此可以判断出的信息:“单边”,A为“多”,B为“一”),这些id由B指向A(由此判定为一对多)

2)单边多对一

表格A——论文:id,name,type

表格B——论文类型:id,name

说明:每篇论文只属于一个类型,每种类型的论文有多篇论文

3)双边多对一/一对多

表格A——班级:id,name,students

表格B——学生:id,name,class

说明:如果去掉表格A中的students属性,则这是一个单边多对一的关系

4)单边多对多

表格A——帖子:id,title,type

表格B——标签:id,name

说明:如果在表格B中添加posts(所有帖子)属性,则这是一个双边多对多的关系

5)单边一对一

表格A——船长:id,name

表格B——船:id,name,host_id

说明:每个船只有一个船长,如果在表A中添加ship_id(船只id)属性,则这是一个双边的一对一的关系

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) 数据库表和实体的映射信息

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.域对象间的关系 关联: 类间的引用关系。以属性定义的方式表现。

关系映射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;

Hibernate HQL 语法 及相关的外键关联

Hibernate HQL 语法及相关的外键关联 例如对于TUser类 1.实体查询 String hql = " from User"; 执行这条语句会返回User以及User子类的纪录。 注: 如果 TUser 类具有外键, 查询结果不会报错,但结果中的外键为空值,访问就报空指针错误! 解决方法: select 别名.属性 from 类 as 别名. 没有别名.属性仍然报错! //此方法不一定能解决,但不会错. hql = "from https://www.wendangku.net/doc/bf7750956.html,ng.Object" 会返回数据库中所有库表的纪录。 where 语句,as可以省略 hql = "from User as user where https://www.wendangku.net/doc/bf7750956.html,='yyy'"; //https://www.wendangku.net/doc/bf7750956.html,为类的属性 hql = "from User user where https://www.wendangku.net/doc/bf7750956.html,='yyy'";

where子句中,我们可以通过比较运算符设定条件,如: =, <>, >, <, >=, <=, between XX and XX, not between, in (xx,xx), not in, is, like %XX% 等。 2.属性查询 (1)List list = session.createQuery("select https://www.wendangku.net/doc/bf7750956.html,, user.age from User user").list(); 还可以在HQL中动态构造对象实例的方法,将数据封装。 (2)List list = session.createQuery("select new User(https://www.wendangku.net/doc/bf7750956.html,, user.age) from TUser as user").list(); Iterator it = list.iterator(); while(it.hasNext() ) { User user = (User)it.next(); System.out.println(user.getName()); } 但是要注意这里的User对象只是对name和age属性的封装,其他状态均未赋值,所以不能用它来进行更新操作。 也可以在HQL的Select子句中使用统计函数 "select count(*) ,min(user.age) from User as user"

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所示。

hibernate各种关联关系

一、多对一关联映射 会在多的一端加入一个外键,指向一的一端,这个外键是由 中的column属性定义的,如果忽略了这个属性那么默认的外键与实体的属性一致 标签的定义示例: * 二、一对一主键关联 1、一对一主键关联单向 t_user id | name | groupid 1 | 菜10 | 1 2 | 容祖儿| 1 t_group id | name 1| 尚学堂 t_person id | name 1| 菜10 2| 容祖儿 t_idcard id | cardNo 1 | 8888888888 2 | 9999999999

hibernate 一对一主键关联映射(单向关联Person---->IdCard ) 一对一主键关联映射:让两个实体对象的id 保持相同,这样可以避免多余的字段被创建 具体映射: idCard 2、一对一主键关联双向 hibernate 一对一主键关联映射(双向关联Person<---->IdCard ) 需要在idcard 映射文件中加入标签指向person ,指示hibernate 如何加载person 默认根据主键加载 t_person id | name 3 | 菜10 4 | 容祖儿 t_idcard id | cardNo 1 | 8888888888 2 | 9999999999

用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 ; //班级类,在多对一关系中属于一的方,不持有其他多余的配置,反而是被多方持有

如何根据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关联关系简单总结

一对一关系 主键关联(夫妻表) 表t_husband pk_id f_name po对象 public class HusbandPO private int id; private String name; private WifePO myWife; hibernate配置 表t_wife Pk_id f_name Po对象 public class WifePO private int id; private String name; private HusbandPO myMan; hibernate配置 myMan

Java应用数据库:Hibernate对多表关联查询

执行救济竞合的实务把握 周玉和彭长林所谓执行救济竞合,是指执行当事人、利害关系人或案外人,就具体执行案件的同一执行行为或执行标的,各自以不同的途径、方式及理由等提出异议,交由人民法院审查裁决的情形。慧眼辨析和准确把握执行救济竞合,对于及时、准确审查处理执行争议,提高执行效率,保护执行当事人、利害关系人、案外人合法权益具有积极意义。笔者现侧重从实务的角度,针对执行救济不同路径的竞合情形,就如何在实务中把握谈些心得。 执行实践中执行救济竞合情形,常见的有各不同主体的执行异议救济竞合、利害关系人程序异议与案外人实体异议竞合、消极执行与执行异议及执行监督救济竞合、执行异议与案外人异议及执行监督救济竞合四种情形。对执行救济竞合情形的不同处理,将在后续救济途径、救济时效、救济功能上产生不同的法律后果。因此,在司法实务中应当明晰梳辨、认真把握,针对不同情形作出不同处理。具体可从四个方面审查把关: 一、把好立案受理关 原则上对所有执行当事人、利害关系人、案外人的异议、执行复议、案外人异议之诉等,均应予以受理。但对同一主体就同一执行事项所提出的异议,则只能选择其中最恰当情形予以立案;如果当事人、利害关系人、案外人已行使异议权、复议权、申请更换执行法院权、诉权以资救济,则无必要启动执行监督立案程序。反之,则应当启动执行监督立案程序予以执行监督。 对于立案受理这一环节,还应注意:一是审查基本要件,防止恶意异议。基本要件包括异议主体身份资料,如公民个人的居民身份证或户口簿、法人的机构代码证等;异议书使用书面形式提出,并由异议人签名盖章;相应的基本证据材料,如执行法院的具体执行行为法律文

书、执行行为所违反的法律条文、对执行标的权属凭证或相应权利证明等。三个基本情况不能同时提供的,一般不予立案受理。二是审查提起异议、复议或诉讼期间。对执行异议要求在执行程序结束前提出;对执行程序已经结束的,不能再作执行异议立案。对所遭受的损害,异议人可通过提起损害赔偿之诉或返还不当得利之诉或者要求执行法院予以国家赔偿;对申请变更执行法院,只能向上一级法院提出,但需适度控制,一般限于被执行人有财产可供执行或有条件执行的案件,且需执行期间满六个月以上(这里的六个月应当剔除公告期间、鉴定评估、异议审查等期间;对裁定不服向上一级法院申请复议期间为十日内,执行当事人、案外人向执行法院提起的许可执行之诉、执行标的异议之诉、分配方案异议之诉,为收到裁定或通知之日起十五日内。 二、把好审查定性关 首先,对执行异议及复议,主要审查执行行为是否违反了法律规定和司法解释,即审查执行行为的合法性。执行行为的范围主要包括四个方面:执行法院采取的执行措施、强制执行时应当遵守的程序、强制执行中作出的某些法律文书(包括应发出而未发出相应的法律文书,应发出但发出了错误的法律文书,不应发出而发出了某种法律文书等等,如进行民事搜查时未出示搜查令等、其他侵害当事人、利害关系人合法权益的执行行为(如违法追加、变更被执行人等。上述情形往往相互交织在一起,难以截然分开。 还应当明确,对于新民事诉讼法所规定的对被执行人限制出境、在征信系统记录、在媒体公布不履行义务信息,应当作为一种执行行为对待,对其异议应按执行异议、复议程序审查。 其次,对案外人异议,主要审查案外人对执行标的物有无“所有权或者是其他阻止标的物转让、交付的权利”,即是否有足以排除强制执行的权利。这种权利不一定都是物权,主要包括所有权、用益物权、担保物权、占有、孳息收取权、债权、依法保全的标的物等。

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、

PowerDesigner中的对象与关系映射建模

PowerDesigner中的对象与关系映射建模 Sybase 公司PowerDesigner上海研发中心余亚,王晓昀 概述 从80年代中期开始,随着C++语言的成功,面向对象语言已经成为软件开发中的主导语言。现在很多商用软件,尤其是企业信息系统,都是使用面向对象语言进行开发的。应用面向对象方法,我们通过类来抽象不同类别的实体,属性来表示实体的静态特征,关联来抽象实体间的联系,继承来抽象类别的包含关系。 很多的应用程序都需要进行数据存储,关系型数据库是最常用的数据管理系统。在关系型数据库中,表、列和外键是抽象数据的基本元素。关系型数据库是建立在关系计算和布尔代数基础之上的,SQL是数据库的操作语言,通过关系运算,连接、联合等,来操作数据。 我们很容易的看出,面向对象模型和关系模型是不完全匹配的。比如 1. 对象可以存储到多张表,表也可以存储多个类的对象。 2. 对象之间的关系是双向的,而表之间的关系是单向的。 3. 对象之间有继承关系,表之间没有。 为了解决这种不匹配,人们定义了很多映射模式来建立两种模型间的对应关系。这些映射模式逻辑上解决了模型间的不匹配,使得面向对象程序能够正确地和关系关系型数据库进行交互,但是对于程序的开发,仍然有很多问题需要解决。 问题 对于设计人员来说,他们需要找到并且描述这两种模型元素间的映射关系,以便编程人员能够正确地实现数据的存储和查询。现在很多建模工具仅提供其中一种模型的支持,比如Together仅支持对象建模,ERWin仅支持数据建模。即使同时支持两种模型,这种支持也很不完整,比如Rose中的数据建模功能。分析设计人员常常需要两种不同的工具来进行建模,如果他们想描述这两种模型元素间的对应关系,他们只能通过文档或者表格的形式。这很容易产生错误,并且如果模型发生改变,这些文档需要手工更改,容易造成不一致,维护起来很困难。 对于编码人员,他们需要应用某种技术来实现模型的这种对应关系。如果通过语言提供的数据库访问接口,比如Java 的JDBC或者.Net的https://www.wendangku.net/doc/bf7750956.html,,对于每一个对象的每一个存储操作,编码人员需要编写存取操作的SQL,数据库控制和访问代码,这是一项繁琐、重复性的劳动。即使应用O/R 映射的框架,比如Hibernate, EJB 3.0或者.Net平台的NHibernate,他们需要编写映射文件或者通过标记来定义O/R映射框架所需要的映射元数据。这些映射元数据只不过是我们在设计阶段定义的映射关系另外一种表现方式,转换成XML或者标记的方式,无疑这种转换增加了错误的可能性和维护的难度。 PowerDesigner解决之道 PowerDesigner提供对于多达8种模型的支持,其中包括面向对象模型和关系数据模型。作为一个集成的企业建模工具,PowerDesigner并不是简单的将几种模型工具罗列在一起。各种模型相互之间可以建立关联,通过这种关联,它提供了企业模型统一、一致的视图。其中模型间的映射和自动生成是建立模型间关联重要的手段。 模型可以描述系统的静态特征和动态特征,而静态特征可以用来表述系统的持久状态,比如面向对象模型中的实体类,数据库模型的表,XML模型中的元素节点等。在PowerDesigner中,我们可以在各种可以描述持久状态模型间建立映射,比如XML模型到面向对象模型间的映射,面向对象模型到关系数据模型的映射等。下面我们就来看一下,PowerDesigner 是如何支持面向对象模型到关系模型的映射的。

从类模型映射到关系模型

根据领域模型分析数据模型 Mapping from the Class Model to the Relational Model 从类模型映射到关系模型 Having described the two domains of interest and the notation to be used, we can now turn our attention as to how to map or translate from one domain to the other. The strategy and sequence presented below is meant to be suggestive rather than proscriptive - adapt the steps and procedures to your personal requirements and environment. 在需要对两个领域建模时,现在我们可以关注如何从一个领域映射或转换映射到另一个领域。以下的策略和方法,就是要启发,而不是强制的步骤和程序应用到您的个人需求和环境。 1. Model Classes Firstly we will assume we are engineering a new relational database schema from a class model we have created. This is obviously the easiest direction as the models remain under our control and we can optimise the relational data model to the class model. In the real world it may be that you need to layer a class model on top of a legacy data model - a more difficult situation and one that presents its own challenges. For the current discussion will focus on the first situation. At a minimum, your class model should capture associations, inheritance and aggregation between elements. 1. 类建模 首先,我们将假设从已创建的类模型生成一个新的关系数据库模型。这显然是最容易的,可控制的,可以通过关系数据库模型反向优化类模型。在现实世界中可能你需要将类模型作为数据模型的上层,这是更困难的情况,也对自己提出了一个挑战。对于目前的讨论将集中在第一种情况。至少,你的类模型应捕元素之间的联系、继承和聚集关系。 2. Identify persistent objects Having built our class model we need to separate it into those elements that require persistence and those that do not. For example, if we have designed our application using the Model-View-Controller design pattern, then only classes in the model section would require persistent state. 2. 确认持久对象 已建成的类模型,我们需要区分这些元素,那些需要持久化和那些不是。例如,如果我们设计我们的应用程序使用Model - View- Controller设计模式,那么只有MODEL模型部分需要持久化状态。

hibernate关联注解

说明: 本文对hibernate的一对多、多对一、多对多的关联 示例代码是Order类和OrderItem类的一对多的关系 1.一对多 1.1注解方式: @OneToMany 代码示例如下: 双向关联,维护端在“多”的一端 Public class Order implements Serializable { Private Set orderItems = new HashSet(); @OneToMany(mappedBy="order"(有了mappedby不能也不该在此再定义@joincolumn),cascade = CascadeType.ALL, fetch = https://www.wendangku.net/doc/bf7750956.html,ZY) @OrderBy(value= "id ASC") public Set getOrderItems() { return orderItems; } } 单向关联,维护端在此端 Public class Order implements Serializable { private Set orderItems = new HashSet(); @OneToMany(cascade = CascadeType.ALL, fetch = https://www.wendangku.net/doc/bf7750956.html,ZY) @JoinColumn(name=”order_id”) @OrderBy(value= "id ASC") public Set getOrderItems() { return orderItems; } } 1.2维护端和级联问题 维护端的意思是对外键进行维护,维护端有对外键进行插入和更新的权利。 下面分情况介绍hibernate的级联操作: 1.2.1单向关联 对“一”表进行插入一条记录的操作: 1)级联类型:CascadeType.ALL 执行语句: 1.insert into category (description, name, id) values(?, ?, ?)

相关文档
相关文档 最新文档