https://docs.oracle.com/javaee%2F6%2Fapi%2F%2F/javax/persistence/SequenceGenerator.html

BaseIdentifier.java
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(updatable = false, nullable = false)
    private Long id;

Order.java extends BaseIdentifier.java
Purchase.java extends BaseIdentifier.java

如何将所有实体(比如订单、采购)的默认序列生成器allocationSize to 1设置为global级别,默认为50

Sample output
Hibernate: 
    create sequence orders_seq start with 1 increment by 50

I cannot在实体级别设置序列生成器,因为它从Base继承了所有实体通用的@ID定义

推荐答案

您应该使用@GenericGenerator而不是@SequenceGenerator来获得更精细的控制来生成序列.

通过SequenceStyleGenerator.CONFIG_SEQUENCE_PER_ENTITY_SUFFIX找到了一种老套的方法来生成子类的序列,甚至不需要修改它们.

试试这个:

import jakarta.persistence.*;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;
import org.hibernate.id.enhanced.SequenceStyleGenerator;

@MappedSuperclass
public class BaseIdentifier {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "custom_gen")
    @GenericGenerator(name = "custom_gen", strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
            parameters = {
                    @Parameter(name = SequenceStyleGenerator.CONFIG_SEQUENCE_PER_ENTITY_SUFFIX, value = "_seq"),
                    @Parameter(name = SequenceStyleGenerator.INITIAL_PARAM, value = "1"),
                    @Parameter(name = SequenceStyleGenerator.INCREMENT_PARAM, value = "1")})
    @Column(updatable = false, nullable = false)
    private Long id;

}

Order_TABLE:

import jakarta.persistence.Entity;

@Entity
public class Order_Table extends BaseIdentifier {

}

购买:

import jakarta.persistence.Entity;

@Entity
public class Purchase extends BaseIdentifier {

}

Spring Boot日志(log):

enter image description here

I've tested with Oracle DB, it's working.

Order_TABLE:

enter image description here

-购买:

enter image description here

Order_TABLE_SEQ:

enter image description here

采购序号:

enter image description here

Java相关问答推荐

伪类focus-in不适用于PFA中的选项卡

错误:在Liferay7.4中找不到符号导入com.liferay.portal.kernel.uuid.PortalUUID;";

关于泛型的覆盖规则

如何获得执行人?

Chunk(Int)已弃用并标记为要删除

为什么Java Annotation接口覆盖对象类中的方法

MimeMessage emlMessage=new MimeMessage(Session,emlInputStream);抛出InvocationTargetException

将PNG转换为位图自定义十六进制字符串

如何使用路径过渡方法使 node 绕圆旋转?

SpringBoot:在条件{Variable}.isBlank/{Variable}.isEmpty不起作用的情况下进行路径变量验证

允许同时执行两个方法,但不能同时执行这两个方法

删除打印语句会影响功能...腐败在起作用?

Spring Validator批注不起作用

如何在Java中的重写方法参数中强制(Enum)接口实现?

我们可以在方法中声明接口吗?

使用同步方法中的新线程调用同步方法

使用Java线程进行并行编程

Spring Mapstruct如何获取Lazy初始化实体字段的信息?

放置在变量中的Java成员引用不相等

人们在 IntelliJ 上将-Dhttp.proxyHost=your.proxy.net -Dhttp.proxyPort=8080放在哪里?