我正在做一个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();
    }
}

在上面,我假设ConcreteExtractionType1ConcreteExtractionType2都实现ExtractionType

09-16 06:47