[Hibernate]主键生成策略

概述

在javabean的配置hbm.xml下的【 <hibernate-mapping>】里关于【<generator class="">】标签里的主键策略。

分类

increment 

整型

Hibernate中提供的一种增长机制,不能再集群环境下或者有并发访问的情况下使用

原理:先进行查询【select max(id) from table】

再进行插入:获取最大值+1作为新的记录的主键

示例:

 <!-- javabean与表的映射关系 -->
        <hibernate-mapping>
        <class name="com.yiki.bean.Person" table="person">
        <!-- 主键对应 -->
        <id name="pid" > 
        <!-- 自增长 -->
        <generator class="increment"></generator>
        </id>
		<property name="name" />
		
        </class>        
        </hibernate-mapping>

identity

整型

由数据库来维护,所以必须使用在有自动增长的数据库中,采用的是数据库底层的自动增长机制【auto_increment】

原理:【insert into table ...】所以没有任何其他主键策略,可以得知其底层是数据库自己维护的

 <generator class="identity"></generator>

sequence

整型

底层是序列的增长方式,适用于Oracle数据库,因为Oracle数据库底层没有自动增长。

uuid

由框架产生,使用随机的String字符作为主键,产生的是32位随机数,一个线程下产生一个,可以多线程

	private int pid;
	private String name;
	private String uuid;//这个才是主键了
	
	
	
	public String getUuid() {
		return uuid;
	}
	public void setUuid(String uuid) {
		this.uuid = uuid;
  <!-- 主键对应 -->
        <id name="uuid" > 
        <generator class="uuid"></generator>
        </id>


native

本地策略,根据底层数据库的不同,自动选择适用于该数据库的主键生成策略

如:mysql-->identity

Oracle-->sequence

assigned

唯一一个自然主键的设置方式,主键生成不用hibernate管理,需要手动设置主键

如果id是主键,在测试中要【p.setId】把id设置

<!-- 主键对应 -->
        <id name="uuid" > 
        <generator class="assigned"></generator>
        </id>
public void save(){
		Person person = new Person();
		person.setName("ttt");
		person.setUuid(UUID.randomUUID().toString());
		session.save(person);
		tr.commit();
	}







猜你喜欢

转载自blog.csdn.net/qq_38277033/article/details/79599765