2011-09-23 7 views
11

Voglio aggiungere una mappatura comeCome aggiungere una mappa <String, Person> in una classe di entità?

Map<String, Person> personMap; 

all'interno di una classe di entità, in cui Person è l'entità. Lo Map identifica lo Person esatto corrispondente allo String (lascia che sia un soprannome di quella persona). La stessa persona può avere nomi diversi e ogni volta che viene dato uno dei nomi, lo stesso Person deve essere trovato.

L'API di persistenza utilizzata è JPA e il provider è EclipseLink. Quale annotazione dovrei usare e come?

risposta

15

Come nella sezione 2.7 di JSR-317, se il valore della mappa è un'entità (che è il tuo caso) viene creata una tabella di join e quindi deve essere utilizzata un'annotazione OneToMany/ManyToOne.

Come per la chiave, se è un tipo di base, è possibile utilizzare @MapKeyColumn per personalizzare la colonna di mapping della chiave. Così qui è il mio prendere sul tuo esempio:

@OneToMany 
@MapKeyColumn(name="person_nickname") 
Map<String, Person> personMap; 

CURA:

Dopo alcuni test, il seguente sembra funzionare abbastanza bene:

@ElementCollection 
@CollectionTable(name="<name_of_join_table>") 
@MapKeyColumn(name="<name_of_map_key_in_table>") 
Map<String, Person> personMap; 

È possibile che questo genera una tabella unirsi con tre campi : uno per l'id del titolare della mappatura, uno per la chiave e uno per il valore.

+0

Funziona alla grande, ma il recupero automatico non funziona per me, quando si leggono gli elementi mappati in Mappa. – sealskej

Problemi correlati