我正在做一个JPA项目。我有一个ExportProfile
对象:
@Entity
public class ExportProfile{
@Id
@GeneratedValue
private int id;
private String name;
private ExtractionType type;
//...
}
ExtractionType
是由多个类实现的接口,每个类用于不同的提取类型,这些类是单例。因此,
type
是对单例对象的引用。我的数据库中没有ExtractionType
表,但是我必须保留导出配置文件的提取类型。如何使用JPA保留
ExportProfile
对象,并将引用保存到type
对象?注意:尚未定义
ExtractionType
实现的数量,因为可以随时添加新的实现。我也在使用Spring,这能帮上忙吗? 最佳答案
这是一个想法:创建一个ExtractionTypeEnum
,对实现ExtractionType
的每个可能单例使用一个元素的枚举,并将其存储为实体中的字段,而不是ExtractionType
。稍后,如果需要检索与ExtractionTypeEnum
值相对应的单例,则可以实现一个工厂,该工厂针对每种情况返回正确的单例:
public ExtractionType getType(ExportProfile profile) {
switch (profile.getExtractionTypeEnum()) {
case ExtractionTypeEnum.TYPE1:
return ConcreteExtractionType1.getInstance();
case ExtractionTypeEnum.TYPE2:
return ConcreteExtractionType2.getInstance();
}
}
在上面,我假设
ConcreteExtractionType1
和ConcreteExtractionType2
都实现ExtractionType
。