在关系数据库中,主键用来识别记录,并保证每天记录的唯一性。在Java语言中,通过比较两个变量所引用对象的内存地址是否相同,或者比较两变量引用的对象是否相等。Hibernate为了解决两者之间的不同,使用对象标识符(OID)来标识对象的唯一性。OID是关系数据库中主键在Java对象模型中的等价物。在运行时,Hibernate根据OID来维持Java对象和数据库中的对应关系。如下所示:
Transaction tx = session.beginTransaction();
User user1 = (User)session.load(User.class,new Long(1));
User user2 = (User)session.load(User.class,new Long(1));
User user3 = (User)session.load(User.class,new Long(3));
应用程序在执行上述代码时,第一次OID为1的对象,从数据库中查找ID为1的记录,然后创建想要的User实例,并把它保存到session的缓存中,最后将该实例的引用赋值给变量user1,第二次加载OID为1的对象时,直接把session缓存中的OID为1的实例的引用赋值给user2,因此user1=user2的结果为true

hibernate的对象标识符(OID)
 可以用<id>元素来设定OID,OID可以定义为short,int,long类型,默认情况下,hibernate生成持久类时,会将OID定义为java包装类型
  用ID元素中的<generator>子元素来设定标识符生成器,例如:
  <id type="long" column="id">
     <generator />
  </id>
  以下是hibernate提供的内置标识符生成器:
  1.increment
  2.identity
  3.sequence
  4.hilo
  5.native
  6.uuid
  7.assigned

Hibernate之OID的更多相关文章

  1. hibernate 对象OID

    它是hibernate用于区分两个对象是否是同一个对象的标识. 我们都知道,虚拟机内存区分两个对象看的是内存的地址是否一致.数据库区分两个对象,靠的是表的主键.hibernate负责把内存中的对象持久 ...

  2. Hibernate入门详解

    学习Hibernate ,我们首先要知道为什么要学习它?它有什么好处?也就是我们为什么要学习框架技术? 还要知道    什么是Hibernate?    为什么要使用Hibernate?    Hib ...

  3. hibernate映射文件

    Hibernate的持久化类和关系数据库之间的映射通常是用一个XML文档来定义的.该文档通过一系列XML元素的配置,来将持久化类与数据库表之间建立起一一映射.这意味着映射文档是按照持久化类的定义来创建 ...

  4. Hibernate —— Entity.hbm.xml

    一.简述 1.对象关系映射文件,用于映射实体类和关系数据库数据表之间的一个 xml 文件. 2.通过 Entity.hbm.xml 映射文件,Hibernate 可以理解持久化类和数据表之间的对应关系 ...

  5. Hibernate 小阶段总结

    (一)Hibernate入门 通俗的话来说:Hibernate是用于面向对象操控数据库,对JDBC进行轻量级封装.(在java世界中传统的来说是JDBC访问数据库.) 1)Hibernate定性:对象 ...

  6. Hibernate核心技术简介

    Hibernate核心技术简介 1.Hibernate映射文件开发     Hibernate映射文件就是项目中*.hbm.xml文件,其主要是完成各元素的配置,包括根元素.类元素.定义主键.设置主键 ...

  7. Hibernate延迟加载、三种状态、脏检查 缓存

    一.持久化对象的唯一标识 java中按内存地址不同区分同一个类的不同对象,关系数据库用主键区分同一条记录,Hibernate使用OID来建立内存中的对象和数据库中记录的对应关系 什么是OID? 解析: ...

  8. Hibernate对象标识符

    Hibernate提供的内置标识符生成器 Java语言按内存地址来识别或区分同一个类的不同对象,而关系数据库按主键来识别或区分同一个表的不同记录.Hibernate使用OID(对象标识符)来统一两者之 ...

  9. Hibernate提供的内置标识符生成器

    Hibernate提供的内置标识符生成器 Java语言按内存地址来识别或区分同一个类的不同对象,而关系数据库按主键来识别或区分同一个表的不同记录.Hibernate使用OID(对象标识符)来统一两者之 ...

随机推荐

  1. vue-cli 4058错误

    vue搭建项目 执行命令 npm install -g vue-cli   出现错误 4058 1.按照文章http://www.jb51.net/article/126221.htm操作没有效果 2 ...

  2. SolidWorks直线命令快捷转换为圆弧命令

    在进行草图绘制的时候,有时候需要切换到圆弧命令,此时来回切换比较麻烦, 我们可以将鼠标回碰线段起点,此时便成为了圆弧工具. 再次回碰,可改变圆心方向 利用鼠标操作,快捷切换绘图工具.

  3. Java HashSet和ArrayList的查找Contains()时间复杂度

    今天在刷leetCode时,碰到了一个题是这样的. 给定一个整数数组,判断是否存在重复元素. 如果任何值在数组中出现至少两次,函数返回 true.如果数组中每个元素都不相同,则返回 false. 看到 ...

  4. cut sort uniq wc 一 文本处理工具

    cut cut是一个选取命令,就是将一段数据经过分析,取出我们想要的. 一般来说,选取信息通常是针对"行"来进行分析的,并不是整篇信息分析的. -c : 以字符为单位进行分割. c ...

  5. JUC 一 CyclicBarrier 与 Semaphore

    java.util.concurrent CyclicBarrier简介 CyclicBarrier:可重用屏障/栅栏 类似于 CountDownLatch(倒计数闭锁),它能阻塞一组线程直到某个事件 ...

  6. USACO 06JAN 牛的舞会 洛谷2863

    题目描述 The N (2 <= N <= 10,000) cows are so excited: it's prom night! They are dressed in their ...

  7. OpenStack与KVM的区别与联系

    转:https://www.aliyun.com/zixun/content/2_6_280418.html OpenStack与KVM都是目前IT界比较热门的两个词汇.它们都是开源的,都与Linux ...

  8. Git 学习(二)Git 基础

    Git 基础 Git 在保存和对待各种信息的时候与其它版本控制系统如 SVN 等等有很大差异,尽管操作起来的命令形式非常相近,理解这些差异将有助于防止你使用中的困惑. Git 记录的是什么? 如果有使 ...

  9. Tomacat7启动报错-org.apache.catalina.deploy.WebXml addFilter

    java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addFilter at org.apache.tomcat.ut ...

  10. openwrt xfrp移植

    对开源软件表示支持 https://github.com/KunTengRom/xfrp 上传编译,选择 cp .config xxx make 刷机 客户端配置文件: /tmp/etc# cat x ...