Zřeknutí se odpovědnosti:Jsem vedoucím projektu Spring Data, takže se zde převážně budu zabývat stránkou Spring Data:
Myslím, že hlavní rozdíl mezi těmito dvěma projekty je v tom, že tým Hibernate OGM se rozhodl soustředit své úsilí kolem JPA, zatímco tým Spring Data to výslovně neudělal. Důvody jsou následující:
- JPA je ze své podstaty relační API. První dvě věty specifikace uvádějí, že se jedná o API pro objektově relační mapování. To je také ztělesněno v základních tématech API:hovoří o tabulkách, sloupcích, spojeních, transakcích. Koncepty, které nejsou nutně přenositelné do světa NoSQL.
- Obvykle si vybíráte obchod NoSQL kvůli jeho speciálním vlastnostem (např. geoprostorové dotazy na MongoDB, schopnost provádět procházení grafů pro Neo4j). Žádná z nich není (a nebude) dostupná v JPA, takže stejně budete muset poskytnout proprietární rozšíření.
- Ještě horší je, že JPA obsahuje koncepty, které jednoduše navedou uživatele špatnými směry, pokud předpokládají, že pracují v obchodě NoSQL, jak byli definováni v JPA:jak by mělo být vrácení transakce rozumně implementováno nad MongoDB?
S Spring Data jsme se tedy rozhodli poskytnout spíše konzistentní model programování pro podporované obchody, ale nesnažte se vše vnutit do jediného příliš abstrakce API:získáte známé implementace šablon, získáte abstrakci úložiště, která funguje identicky pro všechny obchody, ale umožní vám využít specifické funkce a koncepty úložiště.