2013-09-22 166 views
0

我建設有實體的共同基礎的web應用程序爲所有客戶添加動態屬性到JPA實體

現在有些客戶需要額外的領域,但我不希望添加所有。我想過這樣的事情:

@Embeddable 
public class AdditionalDetails { 

private String label; 

private String text; 

public AdditionalDetails() {} 


    // autogenerated getters and setters, hashCode(), equals() 
}  
  
@Entity 
public class BusinessObject { 

    @Id 
    @Column(name = "string_id") 
    private long id; 

    @ElementCollection(fetch=FetchType.EAGER) 
    @MapKey(name = "language") 
    @CollectionTable(schema = "label", name = "multilingual_string_map", 
       joinColumns = @JoinColumn(name = "string_id")) 
    private Map<String, AdditionalDetails> map = new HashMap<String, AdditionalDetails>(); 

    public BusinessObject() {} 

    // autogenerated getters and setters, hashCode(), equals() 
} 

沒有問題是我會怎麼配置誰該屬性由BusinessObject的加入?

回答

0

您可以刪除從基類的@Entity註解。 然後從你的基類的子類創建和@Entity註釋添加到子類。 現在,您可以避免將所有屬性的基類,而不是你可以將它們添加到適當的子類。

+0

,這是一個好主意。但我想一個通用的解決方案,我把一個配置參數或類似打造地圖 – hypery2k

+0

東西,你提出什麼是不可能的JPA。這是因爲字段和方法必須映射到數據庫資源。你正在尋找的是一個字段或訪問者,當給定一些參數時,動態地確定它的映射。這不是JPA如何構建的。 – cmd

+0

總而言之,我所提出的答案很可能可以做,以接近你想要的行爲最好的。如果有幫助,請考慮接受它。非常感謝,祝你好運! – cmd