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. 接口测试框架Requests

    目录 Requests Requests安装 Requests常见接口请求方法构造 请求目标构造 header构造 cookie 构造请求体 Get Query请求 Form请求参数 JSON请求体构 ...

  2. 23. 合并K个排序链表 分治

    这种k个相同的子问题,可以两两分治,总的运算次数为logk 关键部分 int dis=1; int len=lists.size(); while(dis<=len) { for(int i=0 ...

  3. 解决宝塔面板没有命令行问题 && 查看宝塔面板项目环境

    # 宝塔面板没有命令行,无法查看错误输出 利用ssh.比如xshell,MObaxtern .输入ip,username,password就可以进入服务器的命令行. # 查看项目的环境 服务器默认的p ...

  4. Petrozavodsk Winter Training Camp 2017G(栈)题解

    题意: \(M_i\)为一个\(m*m\)矩阵,已知 \[\begin{aligned} &M_0=A\\ &M_i=(\prod_{j=c_i}^{i+1}M_j)B \end{al ...

  5. POJ 3415 Common Substrings(后缀数组 + 单调栈)题解

    题意: 给两个串\(A.B\),问你长度\(>=k\)的有几对公共子串 思路: 先想一个朴素算法: 把\(B\)接在\(A\)后面,然后去跑后缀数组,得到\(height\)数组,那么直接\(r ...

  6. Gif2mp4 by Python

    参考链接 目的: $ .gif \rightarrow .mp4 $ 解决: pip install MoviePy import moviepy.editor as mp clip = mp.Vid ...

  7. Pycharm+任务栏悬浮+docked mode

    先点下所想改变模式的模块, 然后: Window -> Activate tool window -> docked mode.

  8. HTML教程(看完这篇就够了)

    HTML教程 超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言.您可以使用 HTML 来建立自己的 WEB 站点,HTML 运 ...

  9. HTML5 download 执行条件

    HTML5 download 执行条件 同一个域名下的资源 http only 绝对路径/相对路径 都可以 demo https://cdn.xgqfrms.xyz/ https://cdn.xgqf ...

  10. jest all in one

    jest all in one ES Modules & TypeScript & React https://github.com/xgqfrms/FEAT/tree/master/ ...