Springboot的JPA实体为什么是抽象的?

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

我继承了一个基于Springboot的软件,其中每个实体都由至少两种数据类型表示。例如:

DTO:

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class MyEntityDTO {
    Long id;
    String name;
    String description;
    String type;
    Long parentId;
    String parentSerialNumber;
}

对应的JPA实体(表):

@DiscriminatorColumn(name = "type")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Table(name = "my_entities_table")
@Entity

@NoArgsConstructor
@Data
@SuperBuilder
@FieldDefaults(level = AccessLevel.PRIVATE)
public abstract class MyEntity extends IdBasedEntity {
    @ManyToOne(fetch = FetchType.EAGER)
    @JsonIgnore
    Parent parent;
    @Column(name = "type", insertable = false, updatable = false, nullable = false)
    String type;
    @Column(nullable = false)
    String externalId;

    @Column(nullable = false)
    String myentityName;
    @Column
    String description;
}

我的问题是:abstractJPA实体满足什么设计原则和/或模式?

我试图理解这一点,因为我惊讶地发现我无法在 JUnit 中模拟这个实体。我假设这有一个很好的设计原因。

spring spring-boot jpa spring-data-jpa spring-data
1个回答
2
投票

完成@Chris 评论。

根据JPA规范

实体可以从提供持久性的超类继承 实体状态和映射信息,但其本身并不是 实体。通常,此类映射超类的目的是 定义多个实体共有的状态和映射信息 课程。

© www.soinside.com 2019 - 2024. All rights reserved.