2012-05-09 38 views
4

我正在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,這可以幫助嗎?

+0

爲什麼你必須堅持ExtractionType?每次從數據庫加載你的實體時,你不能簡單地使用依賴注入(例如Spring)來注入一個ExtractionType的實現嗎? – javatutorial

+0

@shuuchan右...其實我使用的是Spring,但是我怎樣才能「記住」我必須注入哪個實現? – davioooh

回答

1

這裏有一個想法:做一個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