关系数据库用主键区分是否是同一条记录。

Hibernate使用OID来建立内存中的对象和数据库中记录的对应关系。对象的OID和数据库的表的主键对应。为保证OID的唯一性,应该让Hibernate来为OID赋值。

主键必备条件:

1,不能为null。

2,唯一,不能重复。

3,永远不会改变。

二, 自然主键和代理主键

自然主键:把具有业务含义的字段作为主键叫做自然主键。

代理主键:不具备业务含义的字段,该字段一般取名为“id”。(推荐)

三, 数据库中的主键介绍

关系数据库按主键区分不同记录

把主键定义为自动增长类型

在my SQL中,把字段设为auto_increment类型,数据库会自动为主键赋值。

在ms SQL server中,把字段设为identity类型,数据库会自动为主键赋值。

oracle从序列(sequence)中获取自动增长的描述符

create sequence seq_customer increment by 2 start with 1

insert into customers  values(seq_customer.curval,’..’)

四,java与Hibernate如何区分对象

Java语言按内存地址(==)或equals()方法区分不同的对象

Hibernate中用对象表示符(OID)来区分对象

OID是关系数据库中的主键在java对象模型中的等价物。在运行时,hibernate根据OID来维持java对象和数据库记录的对应关系。

Hibernate使用OID来区分对象,不是equals()方法!所以不重写持久化类的hashCode()与equals()方法Hibernate也可以正确运行(但要放到HashSet等集合中时要注意需要重写这两个方法)。

五。ID和 generator元素配置说明

配置示例:

<id name=“id” type=“long” column=“ID”>

<generator class=“increment” />

</id>

<id>元素说明:

设定持久化类的 OID 和表的主键的映射,可以有以下属性:

¨ name: 标识持久化类 OID 的属性名

¨ column: 设置标识属性所映射的数据列的列名(主键字段的名字).

¨ unsaved-value:若设定了该属性, Hibernate 会通过比较持久化类的 OID 值和该属性值来区分当前持久化类的对象是否为临时对象,在Hibernate3中几乎不再需要.

¨ type:指定 Hibernate 映射类型. Hibernate 映射类型是 Java 类型与 SQL 类型的桥梁. 如果没有为某个属性显式设定映射类型, Hibernate 会运用反射机制先识别出持久化类的特定属性的 Java 类型, 然后自动使用与之对应的默认的 Hibernate 映射类型

¨ Java 的基本数据类型和包装类型对应相同的 Hibernate 映射类型. 基本数据类型无法表达 null, 所以对于持久化类的 OID 推荐使用包装类型

<generator>元素说明

设定持久化类设定标识符生成器,可以有一个class属性:

¨ class: 指定使用的标识符生成器全限定类名或其缩写名。

<generator>元素的class属性可以指定的值说明(主键生成策略)

主键生成器

描述

increment

适用于代理主键。由hibernate自动以递增的方式生成表识符,每次增量为1。

identity

适用于代理主键。由底层数据库生成表识符。条件是数据库支持自动增长数据类型。

sequence

适用于代理主键。Hibernate根据底层数据库序列生成标识符。条件是数据库支持序列。

hilo

适用于代理主键。Hibernate根据hign/low算法生成标识符。Hibernate把特定表的字段作为“hign”值。默认情况下,采用hibernate_unique_key表的next_hi字段。

native

适用于代理主键。根据底层数据库对自动生成表示符的能力来选择identity、sequence、hilo

uuid.hex

适用于代理主键。Hibernate采用128位的UUID算法来生成标识符。该算法能够在网络环境中生成唯一的字符串标识符,这种策略并不流行,因为字符串类型的主键比整数类型的主键占用更多的数据库空间。

assigned

适用于自然主键。由java程序负责生成标识符。不能把setID()方法声明为private的。尽量避免使用自然主键。

OID,唯一性的标志相关推荐

  1. Hash+哈希+哈希函数

    Hash+哈希+哈希函数 hash == 散列 == 哈希 是一种有损压缩技术 是一种数字指纹技术 哈希是一种加密算法 哈希函数(Hash Function),也称为散列函数或杂凑函数.哈希函数是一个 ...

  2. hibernate 一对多_java面试题之Hibernate

    1.为什么要使用 hibernate? hibernate 是对 jdbc 的封装,大大简化了数据访问层的繁琐的重复性代码. hibernate 是一个优秀的 ORM 实现,很多程度上简化了 DAO ...

  3. k8命令,pod的启动流程与资源文件书写,k8s集群调度

    目录 一.常用命令及kubect介绍 1.kubect介绍 1)语法格式: 2)命名空间的概述 3)查看命名空间 4)查看命名空间中的资源对象 2.查用排错命令 1)查询资源文件 2)查看资源详细信息 ...

  4. PWA(Progressive Web App)入门系列:Cache Storage Cache

    前言 目前浏览器的存储机制有很多,如:indexedDB.localStorage.sessionStorage.File System API.applicationCache 等等,那为什么又制定 ...

  5. java菜单管理的实现方式_智能停车场管理系统的收费实现方式有哪些?

    面对需求市场的拉动,用户对停车场管理系统提出更新更高的要求.实现自动进出车辆.自动判别车辆放行.自动缴费管理,将是实现全智能化停车场管理的发展方向,那么智能停车场管理系统的收费实现方式有哪些? 自动计 ...

  6. iOS微信实现第三方登录的方法

    这篇文章主要介绍了iOS微信第三方登录实现的全过程,一步一步告诉大家iOS微信实现第三方登录的方法,感兴趣的小伙伴们可以参考一下 一.接入微信第三方登录准备工作.移动应用微信登录是基于OAuth2.0 ...

  7. 如何进行微信登录授权测试?

    准备工作 移动应用微信登录是基于OAuth2.0协议标准 构建的微信OAuth2.0授权登录系统.在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的移动应 ...

  8. iOS微信第三方登录实现

    iOS微信第三方登录实现 字数2824 阅读7603 评论19 喜欢46 注意:代码自己动手写,不要复制! 一.接入微信第三方登录准备工作. 移动应用微信登录是基于OAuth2.0协议标准构建的微信O ...

  9. ASAM MCD2D 笔记(1) - ODX use cases

    MVCI架构: 7 ODX 数据模型 7.1 基本的建模原则 7.1.1 普通元素 ( Common Members) SHORT-NAME 标识一个 ODX 对象.长度限制在 128 个字符,由数字 ...

最新文章

  1. 【Vegas2007】11月23日-螃蟹的做法(蒸煮两法)
  2. oracle exp 二进制,Oracle备份之exp自动逻辑备份(二)
  3. python xlrd读取文件报错_python中xlrd库如何实现文件读取?
  4. 20180813-20180817
  5. SpringBoot2.0 基础案例(12):基于转账案例,演示事务管理操作
  6. 9.3 LSMW程序创建操作手册 第5 6 7步
  7. 【Vue 3.0 新特性(一)】源码的组织方式
  8. Nginx之虚拟服务器配置
  9. html/css/js各类相对路径引用方法归类
  10. HDU-2082 找单词 母函数
  11. MySQL 8.0 异步复制的三种方式
  12. c++ vector 使用注意事项
  13. 对java并发性的理解,【图片】你了解过Java并发编程:性能、扩展性和响应的高端操作吗?【java吧】_百度贴吧...
  14. 初出茅庐的小李第55篇博客之ESP32点亮WS2812B彩灯
  15. phpqrcode简单在线二维码生成工具源码 非第三方接口
  16. iOS App版本更新并上架App Store
  17. LaTeX代码: 表格 ← 利用 tabular
  18. notepad++格式化xml文件
  19. 旷视研究院张祥雨:3年看1800篇论文,28岁掌舵旷视基础模型研究
  20. 接口自动化之操作mysql数据库

热门文章

  1. 阿里2014届校园招聘面经
  2. 《疯狂动物城》给我的感悟
  3. 《On Java 8》- 面向对象之代码复用(组合、继承、委托)
  4. SpringBoot+Es7.6.1+Jsoup+Vue+Docker打造古诗词实时搜索功能
  5. iPhoneX需求下滑对中国手机企业是好消息
  6. JDK、JRE、JVM三者分别表示什么?有何区别?
  7. 计算机证是准入类吗,准入类与水平类证书的区别
  8. 【Proteus仿真】用24C04与1602LCD设计的简易加密电子密码锁
  9. Shiro的认证原理(Subject#login的背后故事)
  10. VSCode C++环境配置及测试运行