我有一个 Java Spring Boot 项目,其中继承了一个名为
Base.java
的类,其中包含如下字段:
@Id
@GeneratedValue
private String id
然后,我还有一些其他中级课程从该课程延伸出来。
问题是我有几个类我不需要
@GeneratedValue
注释,因为 ID 将使用另一种机制生成。
有什么方法可以从 Base 扩展,并根据任何字段或任何方法,将
@GeneratedValue
注释应用到 id
字段中?
目前我只有一个
BaseWithoutGenerated
类并复制继承模式,但我认为可能存在更优雅的解决方案。
您可以为具有 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
将通用业务逻辑应用于它们两个