OID 全称是 Object Identifier,又叫做对象标识符

是 hibernate 用于区分两个对象是否是同一个对象的标识的方法

标识符的作用:可以让 hibernate 来区分多个对象是否是同一个对象

hibernate 的主键生成策略:

  • 自然主键:把具有业务含义的字段作为主键,称为自然主键,例如用户表,将 username 作为主键;前提是所有用户的 username 都不会重复,并且不为 null,不允许修改,但一旦出现了username 可以重复的业务需求,就必须修改数据模型,重新定义表的主键,给数据库的维护增加了难度
  • 代理主键:把不具有业务含义的字段作为主键,称之为代理主键,该字段一般取名为 “ID”,通常为整数类型(整数比字符串类型节省更多的空间),但是注意主键溢出问题(一般情况下直接就分库分表存储)
  • lncrement:自动增长,是Hibernate中提供一种自动增长方式,不是数据库中的自动增长。(适用于short、int、long类型的主键),

    • 首先使用select max(cust_id) from cst_customer;将这个最大值+1作为下一条记录的主键。
    • 对于并发访问数据库不适用
  • identity:自动增长,适用于short、int、long类型的主键,使用的是数据库自动增长机制。不是所有数据库都支持自动增长,比如Oracle没有自动增长。

  • sequence :序列,适用于short、int、long类型的主键,使用序列方式完成主键的生成。必须是支持序列的方式的数据库。Oracle的自动增长

  • native:本地策略,根据底层的数据库不同,自动选择使用identity还是sequence。

  • uuid:随机字符串,适用于字符串类型的主键。
  • assigned:Hibernate不维护主键,开发人员需要手动设置主键。

结论:如果是针对数值型,选择使用 native, 如果是 varchar 类型,可以使用 uuid,也可以不用 hibernate 维护,自己在程序中手动设定唯一非空(assigned)uuid

hibernate 中持久化标识 OID的更多相关文章

  1. Hibernate中持久化类与持久化对象

    1.JavaBean类 JavaBean类是实体类,必须一下属性,private修饰的成员属性,public修饰的getter与setter访问方法,public修饰的空参构造器,实现Serializ ...

  2. 三、hibernate中持久化类的使用

    hibernate的持久化类 持久化:将内存中的一个对象持久化到数据库中的过程,hibernate就是一个用来进行持久化的框架 持久化类:一个Java对象与数据库中表建立了关系映射,那么这个类在hib ...

  3. hibernate中持久化对象的生命周期(三态:自由态,持久态,游离态 之间的转换)

    三态的基本概念: 1,  暂时状态(Transient):也叫自由态,仅仅存在于内存中,而在数据库中没有对应数据.用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫暂时对象 ...

  4. hibernate中持久化对象的生命周期(转载)

    三态的基本概念 1, 临时状态(Transient):也叫自由态,只存在于内存中,而在数据库中没有相应数据.用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫临时对象: 2 ...

  5. hibernate中持久化对象的状态

    持久化对象有以下几种状态: 临时对象(Transient): 在使用代理主键的情况下,  OID 通常为 null  不处于 Session 的缓存中 在数据库中没有对应的记录 持久化对象(也叫”托管 ...

  6. Hibernate中的持久化类

    一.持久化类概述 就是一个JavaBean,这个JavaBean与表建立了映射关系.这个类就称为是持久化类. 简单理解为 持久化类=JavaBean+映射文件. 持久化类:是指其实例需要被Hibern ...

  7. Hibernate的持久化对象

     Hibernate的持久化类 什么是持久化类        1. 持久化类:就是一个Java类(咱们编写的JavaBean),这个Java类与表建立了映射关系就可以成为是持久化类.        * ...

  8. Hibernate之持久化对象

    时间:2017-1-19 23:00 --Hibernate持久化类的状态1.持久化类:就是一个实体类与数据库建立了映射.2.Hibernate为了方便管理持久化类,将持久化类分为了三种状态:    ...

  9. 关于hibernate中映射中有many to one等外键关联时的问题

    hibernate中的对象的3种状态的理解及导致报错object references an unsaved transient instance - save the transient insta ...

随机推荐

  1. VS常用命令

    1.查看Windows文件首部信息 dumpbin/headers 项目名称. 例如:dumpbin/headers test.exe 2.查看CLR首部信息 dumpbin/clrheader 项目 ...

  2. Maven与Nexus3.x环境构建详解

    一.Maven介绍Apache Maven是一个创新的软件项目管理和综合工具.Maven提供了一个基于项目对象模型(POM)文件的新概念来管理项目的构建,可以从一个中心资料片管理项目构建,报告和文件. ...

  3. Gym 101480F Frightful Formula(待定系数)题解

    #include<cmath> #include<set> #include<map> #include<queue> #include<cstd ...

  4. 网络流学习-Ford-Fulkerson

    首先我们先解决最大流问题 什么是最大流问题呢 根据我的理解,有一个源点s,汇点t,s可以通过一个网络(雾)流向汇点t 但是每一条边都有他的最大传输容量限制,那么我们的任务是,如何分配流量使得..从s流 ...

  5. Cortex-M系列内核 启动文件分析

    最近终于闲了下来了准备好好学习下Cortex-M3/M4系列处理器的架构,经过各种资料的折磨也没法对它的整个工作过程能有个完整的认知,最后看到一片博客打算从程序的运行过程开始探究,所以首先就找到了启动 ...

  6. Python3 & Decorators with arguments & @Decorators with arguments bug

    Python3 & Decorators with arguments & @Decorators with arguments bug @Decorators with argume ...

  7. GitHub & GitHub Package Registry

    GitHub & GitHub Package Registry npm https://github.blog/2019-05-10-introducing-github-package-r ...

  8. C++ 中的智能指针-基础

    简介 在现代 C++ 编程中,标准库包含了智能指针(Smart pointers). 智能指针用来确保程序不会出现内存和资源的泄漏,并且是"异常安全"(exception-safe ...

  9. 处理XML数据应用实践

    摘要:GaussDB(DWS)支持XML数据类型及丰富的XML解析函数,可实现关系数据和XML数据的映射管理功能. XML概述 XML是可扩展的标识语言(eXtensible Markup Langu ...

  10. git相关问题

    1.git查看远程分支更新到本地 git clone 项目地址,示例如下: git clone https://github.com/zhongyushi-git/vue-test.git 在拉取时, ...