一、概述
hibernate中使用两种方式实现主键生成策略,分别是XML生成id和注解方式(@GeneratedValue),下面逐一进行总结。
二、XML配置方法
这种方式是在XX.hbm.xml文件中对generator进行配置,eg:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.test.demo"> <class name="Student"> <id name="id"> <generator class="native"></generator> </id> <property name="name"></property> <property name="age"></property> </class> </hibernate-mapping>
常用的生成策略有以下几种:
identity:对DB2,Mysql,MS SQL Server等的内置标识字段提供支持,返回的标识符是long,short或者int类型
native:可以是identity类型、sequence类型或者hilo类型,取决于不同的底层数据库
sequence:在Oracle,SAP DB中使用序列(sequence)
uuid:使用一种128位的UUID算法产生的字符类型标识,像IP地址一样全网唯一
三、注解方式生成ID:@GeneratorValue
标准的annotation方式的主键生成策略如下:
- AUTO:可以是identity类型或者是sequence类型或者是table类型,取决于底层的数据库
import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class Person { private String name; private int age; private int id; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Id @GeneratedValue(strategy=GenerationType.AUTO) public int getId() { return id; } public void setId(int id) { this.id = id; } }