Question

Je les tableaux suivants:

@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

Je voudrais en classe state pour obtenir map<key, set<value>> de Map<Event, set<StateEventAction>>

Comment puis-je faire en veille prolongée?

Était-ce utile?

La solution

Si vous souhaitez recevoir Carte des ensembles, cela signifie qu'il ya plusieurs actions pour chaque (state_id, event_id) actions. Vous avez donc des applications de mauvaise entité. Il devrait être

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

Dans ce cas, vous pouvez écrire:

@Entity @Table(name = "state")     
State 
    --id 
    --name 
 Map<Event,StateEventAction> eventActions;

Autres conseils

  

Je voudrais en classe d'Etat pour obtenir map<key, Set<value>> de Map<Event, Set<StateEventAction>>

Hibernate ne supporte pas la collecte de collections telles que la liste des listes, Carte des jeux, etc de la boîte. Mais vous pouvez mettre en œuvre votre propre UserCollectionType pour ajouter le support pour ce type de structure de données. Ce poste montre comment le faire en utilisant la MultiMap mise en œuvre de Apache commons.

Ma suggestion serait d'utiliser une approche similaire, mais peut-être préférer la generified Multimap de Google goyave.

Vous aurez probablement besoin d'abord interroger tous les objets StateEventAction pour l'état puis rédigez votre propre code d'abord créer un ensemble pour l'événement sinon déjà créé puis ajoutez le StateEventAction obejct à l'ensemble.

State state = // < the state object;
Query q = Session.createQuery("from StateEventAction sea inner join fetch sea.event where sea.state = :state");
q.setEntity("state", state);

Map<Event, Set<StateEventAction>> map = new HashMap<Event, Set<StateEventAction>>();

for(Iterator itr = q.list().iterator(); itr.hasNext();) {
   StateEventAction sea = itr.next();
   Event event = sea.getEvent();
   Set<StateEventAction> theSet = map.get(event);
   if(theSet == null) {
      theSet = new HashSet<StateEventAction>();
      map.put(event, theSet);
   }
   theSet.add(sea);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top