спящая карта - PullRequest
       2

спящая карта

2 голосов
/ 17 ноября 2010

У меня есть следующие таблицы:

@Entity
@Table(name = "events")    
Event
    --id
    --name

@Entity
@Table(name = "state")    
State
    --id
    --name

@Entity
@Table(name = "action")    
Action
    --id
    --name
@Entity
@Table(name = "state_event_action")
    StateEventAction
--id
--state_id
--event_id
--action_id

Я бы хотел в state классе получить map<key, set<value>> из Map<Event, set<StateEventAction>>

Как мне это сделать в Hibernate?

Ответы [ 3 ]

6 голосов
/ 17 ноября 2010

Я бы хотел получить в государственном классе map<key, Set<value>> из Map<Event, Set<StateEventAction>>

Hibernate не поддерживает набор коллекций, таких как список списков, карта наборов и т. Д. Из коробки. Но вы можете реализовать свой собственный UserCollectionType, чтобы добавить поддержку для такой структуры данных. В этом сообщении в блоге показано, как это сделать, используя реализацию MultiMap от Apache commons.

Я бы предложил использовать аналогичный подход, но, возможно, предпочесть обобщенный Multimap от Google Guava.

2 голосов
/ 17 ноября 2010

Если вы хотите получить карту наборов, это означает, что для каждого действия (state_id, event_id) существует несколько действий. Итак, у вас неправильные отображения сущностей. Должно быть

@Entity 
@Table(name = "state_event_action") 
StateEventAction 
--id 
--state_id 
--event_id 
--Set<action> actions

В этом случае вы можете написать:

@Entity @Table(name = "state")     
State 
    --id 
    --name 
 Map<Event,StateEventAction> eventActions;
1 голос
/ 17 ноября 2010

Вам, вероятно, потребуется сначала запросить все объекты StateEventAction для состояния, затем написать собственный код, чтобы сначала создать набор для события, если он еще не создан, а затем добавить объект StateEventAction в набор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...