有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在基本实体中定义通用主键字段?

我创建了一个BaseEntity类,它将包含其他实体的所有公共字段,如created_datecreated_byupdated_by等,我还在其中保留了主键id。我正在使用extends并使用基本实体类中的字段。主要问题是id字段在某些实体中为Long类型,而在某些其他实体中为String类型,因此如何管理id字段

基本实体类:

@Getter
@Setter
@MappedSuperclass
public abstract class BaseEntity implements Serializable {

    private static final long serialVersionUID = 3779027956207925319L;

    protected Long id;
    private String createdBy;
    private Date createdDate;
    private String lastUpdatedBy;
    private Date lastUpdatedDate;
    private Boolean isActive;

    public abstract Long getId();
    public abstract void setId(Long id);

    @Override
    public String toString() {
        return String.format(
                "BaseEntity [createdBy=%s, createdDate=%s, lastUpdatedBy=%s, lastUpdatedDate=%s, isActive=%s]",
                createdBy, createdDate, lastUpdatedBy, lastUpdatedDate, isActive);
    }
}

共 (2) 个答案

  1. # 1 楼答案

    修改getter和setter,在它们中使用解析,以便它们获得长数据并提供字符串数据,反之亦然

  2. # 2 楼答案

    具有泛型基实体,其中泛型类型定义id列的类型

    @Getter
    @Setter
    @MappedSuperclass
    public abstract class BaseEntity<T> implements Serializable {
    
        protected T id;
    
        // fields, constructors, methods etc
    }
    

    当您有一个id类型为Long的实体时,使用该类型进行扩展

    @Entity
    public class TableWithLongId extends BaseEntity<Long> {
    
        // fields, constructors, methods etc
    }
    

    或者当您需要String类型id

    @Entity
    public class TableWithStringId extends BaseEntity<String> {
    
        // fields, constructors, methods etc
    }