一、O/R映射层基本介绍

O/R映射层是持久层的一个特例,它的数据模型是对象模型(Object),存储模型是关系模型(Relational),cmp和Hibernate是对象模型到关系模型之间转换的两种不同实现。由于对象模型和关系模型应用广泛,所以很多人错误的认为数据持久层就是对象模型到关系型数据库的转换,其实持久化的范围更广一些。

其中,数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中数据模型的统称。数据模型可以是任何数据或对象模型,存储模型可以使关系模型、XML、二进制等。

持久层(Persistence Layer),即专注于实现数据持久化应用领域的某个特定系统的一个逻辑层面,将数据使用者和数据实体相关联。

二、OID

1、对象标识

折叠什么是OID

为了在系统中能够找到所需对象,我们需要为每一个对象分配一个唯一的表示号。在关系数据库中我们称之为关键字,而在对象术语中,则叫做对象标识(Object identifier-OID)。

通常OID在内部都使用一个或多个大整数表示,而在应用程序中则提供一个完整的类为其他类提供获取,操作。

折叠OID的唯一性

一个 OID必须在一个类层次中保持唯一,理想上应该在所有对象上都唯一。

在分配对象OID时需要考虑两个问题

l OID唯一性的层次

l 如何计算OID

我们先来看看第一个问题,对很多面向对象的新手来说,他们对这个问题的认识往往不够深刻。这里涉及到三个层次上的唯一性一个类内的唯一性,一个类层次之间的唯一性,以及所有类之间的唯一性。

譬如,给一个客户对象的OID是只对所有客户实例唯一,还是对所有的人员还是所有的对象。一个具有值76766的OID是可以分配给一个客户对象,一个员工对象,一个订单对象呢?还是只能分配给一个客户而不是员工(因为客户和员工位于同一个类层次之内),还是除了客户外什么都不能分配。这里问题与多态相关一个客户以后可能成为员工,但一个订单对象则不会如此。为了避免在一个对象改变类型的时候需要重新分配OID,你至少应当保证在类层次级别上的唯一性。当然在所有对象上保持唯一可以完全避免类似问题,尽管在实现上可能会有些困难。

折叠OID(ObjectID)应当没有任何业务相关含义

一个非常关键的问题是OID绝对不应当具有任何业务含义。因为任何有业务含义的列都有改变的可能性,而计算机社团多年来从关系数据库学到的最重要的一个事实之一就是不要给你的关键字任何意义。如果你的用户决定改变业务含义,也许他们想要增加几个数字或把数字变为字母数字,那么你需要在任何用到这个关键字的地方进行改变。一个表中的主关键字内的任何东西都有可能被其他表作为外键。就算是一个简单的改变,譬如在你的客户号码马上增加一个数字,可能会造成极大的维护上的开销。在关系数据库中,这种OID策略被称之为代理关键字。

折叠编辑本段2、事例

mib-2,例如IBM{1.3.6.1.4.1.2},Cisco为{1.3.6.1.4.1.9},Novell为{1.3.6.1.4.1.23}等,下面就有system,tcp,udp等,都有相应的某个数值编号,如:.1.3.6.1.4.1.1.2.1.4 如果代表sysName,则显示该主机的系统用户名。

折叠OID检索方式

Hibernate提供的对象检索方式有

导航对象图检索方式

根据已经加载的对象,导航到其他对象。

OID检索方式

按照对象的OID来检索对象。Session的get()和load( )方法提供了这种功能。

折叠HQL检索方式

Hibernate提供了Query接口,它是Hibernate提供的专门的HQL查询接口,能执行各种复杂的HQL查询语句。

折叠QBC检索方式

使用QBC(Query By Criteria)API来检索对象。这种API封装了基于字符串式的查询语句,提供了更加面向对象的接口。

O/R映射及OID方案的更多相关文章

  1. 006开源O/R映射框架内容回顾

    Hibernate是一个O/R映射框架(也称为ORM) 从ORM词来看,O---Object(对象模型):R--- Relational(关联模型),可以做对象和关联的一种映射,当然这只是部分功能,一 ...

  2. 001---Hibernate简介( 开源O/R映射框架)

    该系列教程是使用hibernate3,hibernate4和3有区别(集成spring,使用等),请注意 001---Hibernate简介(开源O/R映射框架) ORM(Object Relatio ...

  3. Hibernate O/R 映射

    O/R 映射 目前为止我们已经通过应用 Hibernate 见识过十分基础的 O/R 映射了,但是还有三个更加重要的有关映射的话题需要我们更详细的探讨.这三个话题是集合的映射,实体类之间的关联映射以及 ...

  4. 计数原理,递推,求从左边能看到l个棒子,右边能看到r个棒子的方案数目

    题意 有高为 1, 2, …, n 的 n 根杆子排成一排, 从左向右能看到 L 根, 从右向左能看到 R 根.求有多少种可能的排列方式.   solution: 数据范围仅200,本来是往组合数学方 ...

  5. RColorBrewer包---R语言的配色方案

    // RColorBrewer包介绍 RColorBrewer包提供了3套很好的配色方案.用户只需要指定配色方案的名称,就可以用包中的brewer.pal()函数生成颜色.这3套配色方案包括: 连续型 ...

  6. (三)映射对象标识符(OID)

    所有项目导入对应的hibernate的jar包.mysql的jar包和添加每次都需要用到的HibernateUtil.java 第一节:Hibernate 用对象标识符(OID)来区分对象 例子: h ...

  7. IIS7配置伪静态把后缀名映射为html方案

    1.在IIS新建站点.[创建的时候不用去选择版本和模式,默认即可] 2.选中站点,切换到功能试图,找到“处理程序映射",双击之后,在打开窗口右侧的操作栏目下做如下设置: 1)右边" ...

  8. 从零打造在线网盘系统之Hibernate配置O/R映射

    欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...

  9. Hibernate学习3—映射对象标识符(OID)

    一.Hibernate 用对象标识符(OID)来区分对象 作如下代码的实验: public class StudentTest { public static void main(String[] a ...

随机推荐

  1. js中页面加载完成后执行的几种方式及执行顺序

    1:使用jQuery的$(function){}; 2:使用jquery的$(document).ready(function(){});前两者本质上没有区别,第1种是第2种的简写方式.两个是docu ...

  2. python 调用接口

    这个比较乱,抽口再修改一下. 工作需要调有赞API的接口数据,  返回数据. 进行数据处理 现在两部分比较重要:1 自动获取数据  ,  2处理excel的过程. 明白接口的过程.传入参数   htt ...

  3. commons-fileupload实现上传进度条的显示

    本文将使用   apache fileupload   ,spring MVC   jquery 实现一个带进度条的多文件上传, 由于fileupload 的局限,暂不能实现每个上传文件都显示进度条, ...

  4. bzoj3402

    题解: spfa最短路 然后枚举判断奇数 代码: #include<bits/stdc++.h> using namespace std; ; ]; void jb(int x,int y ...

  5. bzoj3495

    题解: 对于每一条边的两段都有,很简单 然后处理国家 容易发现前缀和为1 代码: #include<cstdio> #include<algorithm> using name ...

  6. scala学习之实现RPC通信

    最近学习scala,个人感觉非常灵活,实现rpc通信非常简单,函数式编程比较烧脑 1.搭建工程 创建scala maven 工程 项目pom文件 <project xmlns="htt ...

  7. WIFI 基础知识

    转载自:wifi基本知识 如侵犯您的版权,请联系:2378264731@qq.com 1. IE802.11简介 标准号 IEEE 802.11b IEEE 802.11a IEEE 802.11g ...

  8. C#项目中怎样创建和使用类和类库

    创建一个类库项目在“文件”菜单上,选择“新建项目”. 在“新建项目”对话框的“模板”窗格中,单击“类库”. 在“名称”框中键入 Persons,再单击“确定”. 把“添加新解决方案”勾选掉,选择“添入 ...

  9. Inception 初探

    1,安装 下载组件 wget clone https:/github.com/mysql-inception/inception.git rz ll unzip inception-master.zi ...

  10. admin- 源码解析(流程)

    首先我们需要了解一个知识点:---单例模式--- 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中 ...