2015-03-27 16 views
14

Il titolo di questa interrogazione è abbastanza contraddittoria dal momento che sto cercando di implementare le relazioni in un database non relazionale ... :)Spring Data MongoDB: come implementare "relazioni di entità"?

Ma quello che voglio dire è come definire associazioni tra entità nelle classi modello di applicazione lavorando con MongoDB.

Utilizzo di JPA Uso spesso le annotazioni @ManyToMany o @OneToMany per definire le relazioni tra gli oggetti. C'è qualcosa di simile in Spring Data MongoDB?

Studiare MongoDB ho capito che ci sono due possibili approcci per l'associazione: Riferimenti e embedded dati.

Quale viene utilizzato da Spring Data? È possibile configurare la modalità di associazione?

risposta

9

È possibile utilizzare l'annotazione @DBRef per mantenere la classe di riferimento in una raccolta separata, altrimenti il ​​documento verrà mantenuto nello stesso documento (json). L'uso di DBRef richiede una query aggiuntiva per il driver mongodb, si dovrebbe considerare questo per analizzare i problemi di prestazioni.

Da spring data documentation

@DBRef - applicata al campo per indicare che deve essere memorizzato utilizzando un com.mongodb.DBRef.

7.3.4 Utilizzo di DBRefs Il framework di mappatura non deve memorizzare oggetti figlio incorporati nel documento. È anche possibile memorizzarli separatamente e utilizzare un DBRef per fare riferimento a quel documento. Quando l'oggetto viene caricato da MongoDB, quei riferimenti saranno risolti con entusiasmo e si otterrà un oggetto mappato che ha lo stesso aspetto di se fosse stato memorizzato all'interno del documento master.

+2

Fare attenzione con @DBRef. Non sarà possibile utilizzare le proiezioni per i documenti di riferimento. Cioè 'docA = {id: 1, anotherDoc: DBRef (id: 2)}' e 'docB = {id: 2, foo: bar}'. Ora puoi usare una proiezione quando esegui una query per 'docA', ma non mi applicherò a' docB'. Quello che voglio dire è che tu ** non puoi ** fare qualcosa come questa proiezione '{anotherDoc.foo:0}'. Prenderà sempre l'intero 'docB'. –

Problemi correlati