Ansvarsfraskrivelse:Jeg er leder af Spring Data-projektet, så jeg vil for det meste dække Spring Data-siden af tingene her:
Jeg tror, at kerneforskellen mellem de to projekter er, at Hibernate OGM-teamet valgte at centrere deres indsats omkring JPA, mens Spring Data-teamet udtrykkeligt ikke gjorde det. Årsagerne er som følger:
- JPA er en iboende relationel API. De første to sætninger i specifikationen angiver, at det er en API til objektrelationel kortlægning. Dette er også inkorporeret i kernetemaer i API'en:det taler om tabeller, kolonner, joinforbindelser, transaktioner. Koncepter, der ikke nødvendigvis kan overføres til NoSQL-verdenen.
- Du vælger normalt en NoSQL-butik på grund af dets særlige træk (f.eks. geo-spatiale forespørgsler på MongoDB, at kunne udføre grafgennemgange for Neo4j). Ingen af dem er (og vil være) tilgængelige i JPA, så du skal alligevel levere proprietære udvidelser.
- Endnu værre, JPA har koncepter, der simpelthen vil guide brugerne i forkerte retninger, hvis de antager, at de arbejder på en NoSQL-butik, som de blev defineret i JPA:hvordan skal en tilbagerulning af transaktioner implementeres med rimelighed oven på en MongoDB?
Så med Spring Data valgte vi hellere at levere en konsekvent programmeringsmodel for de understøttede butikker, men prøv ikke at tvinge alt ind i en enkelt overabstrakt API:du får de velkendte skabelonimplementeringer, du får repository-abstraktionen, som fungerer identisk for alle butikker, men lader dig udnytte butiksspecifikke funktioner og koncepter.