Java继承-Spring Boot条件@GeneeratedValue注解

问题描述 投票:0回答:1

我有一个 Java Spring Boot 项目,其中继承了一个名为

Base.java
的类,其中包含如下字段:

@Id
@GeneratedValue
private String id

然后,我还有一些其他中级课程从该课程延伸出来。

问题是我有几个类我不需要

@GeneratedValue
注释,因为 ID 将使用另一种机制生成。

有什么方法可以从 Base 扩展,并根据任何字段或任何方法,将

@GeneratedValue
注释应用到
id
字段中?

目前我只有一个

BaseWithoutGenerated
类并复制继承模式,但我认为可能存在更优雅的解决方案。

java spring-boot jpa inheritance annotations
1个回答
0
投票

您可以为具有 id 的实体创建两个子类。一种用于自动生成的 ID,另一种用于自定义 ID。使用

@MappedSuperclass
将允许 spring 仅将超类映射到您的数据库对象,因为当前类本身不会映射到任何表:

@MappedSuperclass
public abstract class GeneratedIdEntity implements IdEntityInterface {
    @GeneratedValue
    @Id
    private Long id;

    public Long getId() { return id; }
    public void setId(Long id) {
        this.id = id;
    }
}

@MappedSuperclass
public abstract class IdEntity implements IdEntityInterface {
    @Id
    private Long id;

    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
}

现在,将它们中的任何一个用于您各自的实体,并使用通用的

IdEntityInterface

将通用业务逻辑应用于它们两个
© www.soinside.com 2019 - 2024. All rights reserved.