@GenericGenerator 支持自定义 org.hibernate.id.IdentifierGenerator 实现。

Pooled-lo optimizer mapping using @GenericGenerator mapping

package org.example.demo.hibernate;

import javax.persistence.Entity;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
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();

        Product p1 = new Product();
        Product p2 = new Product();
        Product p3 = new Product();

        em.getTransaction().begin();
        em.persist(p1);
        em.persist(p2);
        em.persist(p3);
        em.getTransaction().commit();

        em.close();
        factory.close();
    }

    @Entity(name = "Product")
    public static class Product {
        @Id
        @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "product_generator")
        @GenericGenerator(name = "product_generator", strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator", parameters = {
                @Parameter(name = "sequence_name", value = "product_sequence"),
                @Parameter(name = "initial_value", value = "1"), @Parameter(name = "increment_size", value = "3"),
                @Parameter(name = "optimizer", value = "pooled-lo") })
        private Long id;
    }
}

生成 SQL

drop table if exists Product cascade
drop sequence if exists product_sequence

create sequence product_sequence start 1 increment 3
create table Product (id int8 not null, primary key (id))
select nextval ('product_sequence')
insert into Product (id) values (1)
insert into Product (id) values (2)
insert into Product (id) values (3)

results matching ""

    No results matching ""