四、ID生成策略
第一种:XML配置ID
通过为
(1)increment:用于为long、short、或者int类型生成唯一标识。只有在没有其他进程往同一张表中插入数据的时候才能使用。在集群不要使用。(极少使用)
?
(2)native:让数据库自动选择identity,sequence,或者其他。
?
(3)uuid:128位的UUID算法,产生String类型ID
?
(4)identity:对于DB2、MySQL、SQL Server、Sybase和HypersonicSQL的内置标识字段提供支持。返回的标识符是long、short或者int类型。
?
sequence:在Oracel,PostgreSQL,SAP,DB,Mckio中使用序列(sequence),而在Interbase中使用生成器(generator),返回的标识符是long、short或者是int类型。
?
小实验1:
(1)创建Student.java
package com.zgy.hibernate.model;
public class Student {
private String id;
private String name;
private int age;
private int score;
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = 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;
}
}
(2)在Student.hbm.xml中,为
(3)测试
?
package com.zgy.hibernate.model;
import static org.junit.Assert.*;
import java.util.Date;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
public class HibernateIDTest {
public static SessionFactory sf = null;
@BeforeClass
public static void beforeClass(){
sf = new AnnotationConfiguration().configure().buildSessionFactory();
}
@Test
public void testStudent() {
Student s = new Student();
s.setName("张三");
s.setAge(20);
s.setScore(90);
Session session = sf.openSession();
session.beginTransaction();
session.save(s);
session.getTransaction().commit();
session.close();
}
@AfterClass
public static void afterClass(){
sf.close();
}
}
(4)验证
select * from student; +-----------------------------------------------+--------+------+------+ | id | name | age | score | +------------------------------------------------+------+-------+------+ | 4028dae54aa322d1014aa322d5a50000 | 张三 | 20 | 90 | +----------------------------------+------+-----+-------+------+------+ desc student;
数据插入成功,id类型为varchar(255),主键
?
?
小实验2:
(1)修改Student.java。将id修改为int类型
?
package com.zgy.hibernate.model;
public class Student {
private int id;
private String name;
private int age;
private int score;
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
(2)在Student.hbm.xml中,为