一、注解式 annotation: (java在线文档----java ee----javax.presistence----GenerationType)
一)@GeneratedValue
默认为(1)AUTO:
mysql 默认为auto_increment
oracle 默认 hibernate_sequence(固定写法)
如:
package com.bean;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class Student {
private int id;
private String name;
private String password;
@Id
@GeneratedValue
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 String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
(2)采用identity策略:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
(3)sequence策略:用于oracle数据库
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
使用sequence生成器可以自定义生成器名字(类之前使用@SequenceGenerator(name = "mySequence",sequenceName = "mySequence_DB"))如:
@Entity
@SequenceGenerator(name = "mySequence",sequenceName = "mySequence_DB")
public class Student {
private int id;
private String name;
private String password;
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "mySequence")
public int getId() {
return id;
}
二)@TableGenerator :表格生成器(多用于跨平台(跨数据库等),很多时候都不会遇到, 故为了解内容)
@Entity
@TableGenerator(
name="stu_GEN",
table="Table_GEN",
pkColumnName="GEN_KEY",
valueColumnName="GEN_VALUE",
pkColumnValue="Student",
allocationSize=1)
public class Student {
private int id;
private String name;
private String password;
@Id
@GeneratedValue(strategy = GenerationType.TABLE,generator = "stu_GEN")
public int getId() {
return id;
}
原理:有两个字段 , key 和 value 字段,可以放入n条记录(不同的实例),通过key来获取value 的值(即生成id),每次获取完成后,value的值加1
二、XML生成ID
generator:常用四个属性native 、 identity 、sequence 、 uuid
其中native根据数据类型自动选择属性:
在mysql 中默认 identity (auto_increment)
在oracle 中默认 sequence