我继承了一个基于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 中模拟这个实体。我假设这有一个很好的设计原因。
完成@Chris 评论。
根据JPA规范
实体可以从提供持久性的超类继承 实体状态和映射信息,但其本身并不是 实体。通常,此类映射超类的目的是 定义多个实体共有的状态和映射信息 课程。