O/R映射及OID方案
一、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方案的更多相关文章
- 006开源O/R映射框架内容回顾
Hibernate是一个O/R映射框架(也称为ORM) 从ORM词来看,O---Object(对象模型):R--- Relational(关联模型),可以做对象和关联的一种映射,当然这只是部分功能,一 ...
- 001---Hibernate简介( 开源O/R映射框架)
该系列教程是使用hibernate3,hibernate4和3有区别(集成spring,使用等),请注意 001---Hibernate简介(开源O/R映射框架) ORM(Object Relatio ...
- Hibernate O/R 映射
O/R 映射 目前为止我们已经通过应用 Hibernate 见识过十分基础的 O/R 映射了,但是还有三个更加重要的有关映射的话题需要我们更详细的探讨.这三个话题是集合的映射,实体类之间的关联映射以及 ...
- 计数原理,递推,求从左边能看到l个棒子,右边能看到r个棒子的方案数目
题意 有高为 1, 2, …, n 的 n 根杆子排成一排, 从左向右能看到 L 根, 从右向左能看到 R 根.求有多少种可能的排列方式. solution: 数据范围仅200,本来是往组合数学方 ...
- RColorBrewer包---R语言的配色方案
// RColorBrewer包介绍 RColorBrewer包提供了3套很好的配色方案.用户只需要指定配色方案的名称,就可以用包中的brewer.pal()函数生成颜色.这3套配色方案包括: 连续型 ...
- (三)映射对象标识符(OID)
所有项目导入对应的hibernate的jar包.mysql的jar包和添加每次都需要用到的HibernateUtil.java 第一节:Hibernate 用对象标识符(OID)来区分对象 例子: h ...
- IIS7配置伪静态把后缀名映射为html方案
1.在IIS新建站点.[创建的时候不用去选择版本和模式,默认即可] 2.选中站点,切换到功能试图,找到“处理程序映射",双击之后,在打开窗口右侧的操作栏目下做如下设置: 1)右边" ...
- 从零打造在线网盘系统之Hibernate配置O/R映射
欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...
- Hibernate学习3—映射对象标识符(OID)
一.Hibernate 用对象标识符(OID)来区分对象 作如下代码的实验: public class StudentTest { public static void main(String[] a ...
随机推荐
- Python flask网站部署总结
先开一贴,有空来总结下前段时间的网站部署情况.此次部署采用Gunicorn + Nginx + supervisor的组合在VPS环境中部署flask网站应用. Ubuntu环境准备 准备python ...
- LeetCode OJ:Generate Parentheses(括号生成)
Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...
- SpringInAction--XML配置Spring Aop
前面学习了如何用注解的方式去配置Spring aop,今天把XML配置的方法也看了下,下面顺便也做了个记录 先把spring中用xml配置aop的配置元素给贴出来: <aop:advisor&g ...
- 状态保持: cookier及session简介
状态保持 因为 http 是一种无状态协议,浏览器请求服务器是无状态的. 无状态:指一次用户请求时,浏览器.服务器无法知道之前这个用户做过什么,每次请求都是一次新的请求. 无状态原因:浏览器与服务器是 ...
- Flask框架中特有的变量/函数及上下文
模板中特有的变量和函数 你可以在自己的模板中访问一些 Flask 默认内置的函数和对象 config 你可以从模板中直接访问Flask当前的config对象: {{config.SQLALCHEMY_ ...
- The Interview Outline
************************* 一.基础部分************************* 1.1 常用数据类型 - 字符串 split/strip/replace/find/ ...
- 每周荐书:机器学习、Java虚拟机、微信开发(评论送书)
每周荐书:机器学习.Java虚拟机.微信开发(评论送书) 感谢大家对每周荐书栏目的支持,先公布下上周中奖名单 年精心雕琢,难得的"理论 + 实战案例 + 趟坑经验"总结 从需求分析 ...
- EasyDSS流媒体服务器实现RTMP直播同步HLS录像和时移回放
本文转自EasyDarwin团队成员Alex的博客:http://blog.csdn.net/cai6811376/article/details/74166337 "目前在市面上可以找到的 ...
- 主机屋MySQL数据库链接
点击高级设置,进入Myadmin,导入数据 要注意,数据库名字不能变,这是人家给的. 在php链接时,: $db=[ // 服务器地址 'hostname' => 'localhost', // ...
- vue-router(二)后代路由
关键字:router,children ,router-link,router-view,router-link-active 先理解什么是children? 后代路由为某路由中用到router-vi ...