使用 org.hibernate.id.UUIDGenerator 实现
默认的 org.hibernate.id.UUIDGenerationStrategy 是 version 4 (random) strategy according to IETF RFC 4122
an alternative strategy which is a RFC 4122 version 1 (time-based) strategy (using ip address rather than mac address).
Implicitly using the random UUID strategy
package org.example.demo.hibernate;
import java.util.UUID;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Persistence;
public class Test {
public static void main(String[] args) {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");
EntityManager em = factory.createEntityManager();
Person p = new Person();
em.getTransaction().begin();
em.persist(p);
em.getTransaction().commit();
em.close();
factory.close();
}
@Entity(name = "Person")
public static class Person {
@Id
@GeneratedValue
private UUID id;
}
}
生成 SQL
drop table if exists Person cascade
create table Person (id uuid not null, primary key (id))
insert into Person (id) values ('d14f5a23-583e-458e-9382-7443de414600')
using the random UUID strategy
package org.example.demo.hibernate;
import java.util.UUID;
import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Persistence;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;
public class Test {
public static void main(String[] args) {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");
EntityManager em = factory.createEntityManager();
Person p = new Person();
em.getTransaction().begin();
em.persist(p);
em.getTransaction().commit();
em.close();
factory.close();
}
@Entity(name = "Person")
public static class Person {
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "org.hibernate.id.UUIDGenerator", parameters = { @Parameter(name = "uuid_gen_strategy_class", value = "org.hibernate.id.uuid.CustomVersionOneStrategy") })
private UUID id;
}
}
生成 SQL
drop table if exists Person cascade
create table Person (id uuid not null, primary key (id))
insert into Person (id) values ('7f000001-5cfd-196c-815c-fdf96e8c0000')