2013-09-22 2 views
0

Я строю веб-приложение с общей базой лиц для всех клиентовДобавление динамических атрибутов для 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 к подклассам. Теперь вы можете избежать размещения всех атрибутов в базовом классе, вместо этого вы можете добавить их в соответствующий подкласс.

+0

это хорошая идея. Но я хотел получить общее решение, где я установил параметр конфигурации или что-то подобное, чтобы построить карту. – hypery2k

+0

. Что вы предлагаете с JPA не представляется возможным. Это связано с тем, что поля и методы должны отображаться на ресурс базы данных. То, что вы ищете, - это одно поле или аксессуар, который при заданном параметре динамически определяет его отображение. Это не то, как JPA была задумана. – cmd

+0

В целом, мой предложенный ответ, скорее всего, лучше всего подходит, чтобы приблизиться к поведению, которое вы хотите. Пожалуйста, подумайте о принятии, если это поможет. Большое спасибо и удачи! – cmd

Смежные вопросы