MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Qual è la differenza tra Spring Data MongoDB e Hibernate OGM per MongoDB?

Dichiarazione di non responsabilità:sono il capo del progetto Spring Data, quindi tratterò principalmente il lato delle cose Spring Data qui:

Penso che la distinzione fondamentale tra i due progetti sia che il team di Hibernate OGM ha scelto di concentrare i propri sforzi attorno all'APP, mentre il team di Spring Data esplicitamente non lo ha fatto. I motivi sono i seguenti:

  • JPA è un'API intrinsecamente relazionale. Le prime due frasi della specifica affermano che è un'API per la mappatura relazionale degli oggetti. Questo è anche incarnato nei temi centrali dell'API:parla di tabelle, colonne, join, transazioni. Concetti che non sono necessariamente trasferibili nel mondo NoSQL.
  • Di solito scegli un negozio NoSQL a causa delle sue caratteristiche speciali (ad es. query geospaziali su MongoDB, essere in grado di eseguire attraversamenti di grafici per Neo4j). Nessuno di essi è (e sarà) disponibile in JPA, quindi dovrai comunque fornire estensioni proprietarie.
  • Ancora peggio, JPA presenta concetti che guideranno semplicemente gli utenti in direzioni sbagliate se presuppongono che lavorino su un negozio NoSQL come definito in JPA:come dovrebbe essere implementato ragionevolmente un rollback delle transazioni su un MongoDB?

Quindi con Spring Data abbiamo scelto di fornire un modello di programmazione coerente per i negozi supportati, ma non cercare di forzare tutto in un'unica API che astrae eccessivamente:ottieni le ben note implementazioni dei modelli, ottieni l'astrazione del repository, che funziona in modo identico per tutti i negozi ma ti consente di sfruttare funzionalità e concetti specifici del negozio.