Hibernate下主键id生成策略,需要考虑到数据库使用类型和自己需求进行配置,参考大牛博文发现有很多种生成策略,限于时间只记录课程中的三种生成策略,如果想查看学习其他生成策略参考文末博文。本文将记录三种生成策略在id标签下如何配置,主要是在id标签下使用<generator class=“主键生成策略”>来进行配置。
identity
identity是数据库自己生成,主键在数据库建表时需设定为自增长,因此需要数据库支持自增长,目前学习的MySql是支持的,其他还有DB2,SQL Server也支持。其中MySql需使用AUTO_INCREMENT来设定自增类型。
<id name="" column="" type="">
<generator class="identity" />
</id>
sequence
sequence是需要提供序列的数据库才可以使用,如学习的oracle,另外还有DB,SAP,SAP DB等。MySql则不支持了。
<id name="" column="" type="">
<generator class="sequence">
<param name="sequence">seq_name</param>
</generator>
</id>
其中 <param name="sequence">seq_name</param>的seq_name是使用的序列名称,如果不指定序列名称将使用Hibernate框架默认的序列名hibernate_sequence(需要提前创建这个序列)。
uuid
UUID算法:Universally Unique Identifier,是指在一台机器上生成的字符串,其保证在同一时空对所有的机器都是独一无二的,按照开放基金会(OSF)指定的标准,其用到了以太网地址、纳秒级时间、芯片ID码和许多可能的数字,标准格式如下:
xxxxxxxx-xxxx-xxxx-xxxxxx-xxxxxxxxxx(8-4-4-4-12),x是0-9或a-f范围内的一个十六进制数字。
<id name="" column="" type="">
<generator class='uuid" />
</id>
测试Hibernate下自动生成主键id
新建立student类和teacher类,并在MySql中建立对应表,分别在映射文件中使用identity策略和uuid策略来生成主键id。
(1)使用identity测试
建立student类
package Entity; import java.io.Serializable; /** * 用于测试ID生成规则的实体类,使用MySql自增 * @author yangchaolin * */ public class Student implements Serializable{ private static final long serialVersionUID = 4625674206340889226L; private int id; private String name; public Student() { super(); } public Student(int id, String name) { super(); this.id = id; this.name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public static long getSerialversionuid() { return serialVersionUID; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + id; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Student other = (Student) obj; if (id != other.id) return false; return true; } @Override public String toString() { return "Student [>; } }