使用 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')