Hibernate的主键生成策略
来源:互联网 发布:阿里云机房在哪里 编辑:程序博客网 时间:2024/06/04 20:00
在Hibernate中,javabean + hbm.xml 又称作persistent object,即PO 持久对象。持久化对象的唯一标识 为OID。
Java按地址区分同一个类的不同对象.
关系数据库用主键区分同一条记录
Hibernate使用OID来建立内存中的对象和数据库中记录的对应关系
对象的OID和数据库的表的主键对应。为保证OID的唯一性,应该让Hibernate来为OID付值,hibernate 通过主键生成策略对OID进行赋值
Hibernate的主键分类
代理主键:Hibernate负责生成
自然主键:程序自己生成
hbm配置文件中的配置:
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.my.bean" > <class name="User" table="t_user"> <id name="id"> <!-- hibernate的主键生成策略 --> <generator class="native"></generator> </id> <property name="username" ></property> </class></hibernate-mapping>
id:设定持久化类的 OID 和表的主键的映射
name: 标识持久化类 OID 的属性名
column: 设置标识属性所映射的数据列的列名(主键字段的名字).
unsaved-value:若设定了该属性, Hibernate 会通过比较持久化类的 OID 值和该属性值来区分当前持久化类的对象是否为临时对象,在Hibernate3中几乎不再需要.
type:指定 Hibernate 映射类型. Hibernate 映射类型是 Java 类型与 SQL 类型的桥梁. 如果没有为某个属性显式设定映射类型, Hibernate 会运用反射机制先识别出持久化类的特定属性的 Java 类型, 然后自动使用与之对应的默认的 Hibernate 映射类型
Java 的基本数据类型和包装类型对应相同的 Hibernate 映射类型. 基本数据类型无法表达 null, 所以对于持久化类的 OID 推荐使用包装类型(integer,long,string等)
generator:设定持久化类设定标识符生成器
class: 指定使用的标识符生成器全限定类名或其缩写名
主键生成策略:
increment 标识符生成器: 代理主键
increment 标识符生成器由 Hibernate 以递增的方式为代理主键赋值
Hibernate 会先读取表中的主键的最大值, 而接下来向表中插入记录时, 就在 max(id) 的基础上递增, 增量为 1.
适用范围:
由于 increment 生存标识符机制不依赖于底层数据库系统, 因此它适合所有的数据库系统
适用于只有单个 Hibernate 应用进程访问同一个数据库的场合
OID 必须为 long, int 或 short 类型, 如果把 OID 定义为 byte 类型, 在运行时会抛出异常
缺陷:存在线程并发问题
identity 标识符生成器: 代理主键
identity 标识符生成器由底层数据库来负责生成标识符, 它要求底层数据库把主键定义为自动增长字段类型(加1带走)
适用范围:
由于 identity 生成标识符的机制依赖于底层数据库系统, 因此, 要求底层数据库系统必须支持自动增长字段类型. 支持自动增长字段类型的数据库包括: DB2, Mysql, MSSQLServer, Sybase 等
OID 必须为 long, int 或 short 类型, 如果把 OID 定义为 byte 类型, 在运行时会抛出异常
sequence 标识符生成器: 代理主键
sequence 标识符生成器利用底层数据库提供的序列来生成标识符
Hibernate 在持久化一个 News 对象时, 先从底层数据库的 news_seq 序列中获得一个唯一的标识号, 再把它作为主键值
适用范围:
由于 sequence 生成标识符的机制依赖于底层数据库系统的序列, 因此, 要求底层数据库系统必须支持序列. 支持序列的数据库包括: DB2 Oracle 等
OID 必须为 long, int 或 short 类型, 如果把 OID 定义为 byte 类型, 在运行时会抛出异常
hilo 标识符生成器:代理主键
hilo 高低位算法生成器, 使用高低位算法维护数据唯一。不依赖于数据库。将在数据库中创建一个用于标识数据库的表。
适用范围:
数据库不支持identity和sequence两种生成器时
native 标识符生成器:代理主键
native 标识符生成器依据底层数据库对自动生成标识符的支持能力, 来选择使用 identity, sequence 或 hilo 标识符生成器.
适用范围:
由于 native 能根据底层数据库系统的类型, 自动选择合适的标识符生成器, 因此很适合于跨数据库平台开发
OID 必须为 long, int 或 short 类型, 如果把 OID 定义为 byte 类型, 在运行时会抛出异常
assigned 标识符生成器:自然主键
映射单个自然主键,UUID ,id(身份证)
uuid 32位标识符生成器:代理主键
自动生成UUID值
Hibernate会产生不重复的32位字符串作为主键
- hibernate主键的生成策略
- Hibernate的主键生成策略
- hibernate的主键生成策略
- Hibernate的主键生成策略
- hibernate的主键生成策略
- hibernate的主键生成策略
- hibernate的主键生成策略
- Hibernate主键的生成策略
- Hibernate的主键生成策略
- hibernate的主键生成策略
- Hibernate的主键生成策略
- hibernate的主键生成策略
- Hibernate的主键生成策略
- Hibernate的主键生成策略
- Hibernate的主键生成策略
- Hibernate的主键生成策略
- Hibernate的主键生成策略
- hibernate的主键生成策略
- zookeeper
- 高级网络配置及ipv6网络的管理
- poj2488
- 为了学习,找些好伙伴吧
- Python3教程--协程(转自廖雪峰的官方网站)
- Hibernate的主键生成策略
- lintcode 85 在二叉树中插入节点
- 跟我学TCP/IP系列4
- Imu数据均值滤波分析
- 什么是优先级?
- mvcc 数据库相关
- eclipse 自带git插件 文件提交后修改标志不明显
- 腾讯云cors配置
- 四种色彩模式ARGB_8888、ARGB_4444、 RGB_565、 ALPHA_8的区别