Как я могу создать сущность с 2 коллекциями элементов? - PullRequest
1 голос
/ 26 ноября 2011

У меня есть объект сущности, который содержит две коллекции элементов как таковые:

@Entity
public class Report {

    // Electronic transactions items map
    @ElementCollection(fetch = FetchType.EAGER)
    @MapKeyColumn(name = "catElecItem_key", nullable = false)
    @Cascade(value = { CascadeType.ALL })
    public Map<Category, ReportItem> catElecItemMap;

    // Branch transactions items map
    @ElementCollection(fetch = FetchType.EAGER)
    @MapKeyColumn(name = "catBranchItem_key", nullable = false)
    @Cascade(value = { CascadeType.ALL })
    public Map<Category, ReportItem> catBranchItemMap;
}

При создании таблиц создается таблица с именем Report_ReportItem для сопоставления между Категория и сопоставленным ReportItem . Однако это не удается, так как при попытке сохранить карты enther * catElecItem_key * или * catBranchItem_key * будет иметь значение null. Если я попытаюсь аннотировать с помощью nullable = true , таблица не будет создана, поскольку оба ключа используются как часть определения первичного ключа.

Можно ли указать для каждой коллекции использование отдельной таблицы?

Ответы [ 2 ]

4 голосов
/ 26 ноября 2011

Вы пытались использовать @CollectionTable аннотацию?

@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name="<custom_map_table_name>")
@MapKeyColumn(name = "catElecItem_key", nullable = false)
@Cascade(value = { CascadeType.ALL })
public Map<Category, ReportItem> catElecItemMap;
0 голосов
/ 26 ноября 2011

Решил проблему с помощью аннотации @ CollectionTable . Новый класс теперь выглядит так:

@Entity
public class Report {
    // Electronic transactions items map
    @ElementCollection(fetch = FetchType.EAGER)
    @MapKeyColumn(name = "catElecItem_key", nullable = false)
    @CollectionTable(name = "TrxReportElecItems", joinColumns = @JoinColumn(name = "id"))
    @Cascade(value = { CascadeType.ALL })
    public Map<Category, ReportItem> catElecItemMap;

    // Branch transactions items map
    @ElementCollection(fetch = FetchType.EAGER)
    @MapKeyColumn(name = "catBranchItem_key", nullable = false)
    @CollectionTable(name = "TrxReportBranchItems", joinColumns = @JoinColumn(name = "id"))
    @Cascade(value = { CascadeType.ALL })
    public Map<Category, ReportItem> catBranchItemMap;
   ... 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...