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

results matching ""

    No results matching ""