Отказ от отговорност:Аз съм ръководител на проекта Spring Data, така че най-вече ще обхващам страната на Spring Data тук:
Мисля, че основната разлика между двата проекта е, че екипът на Hibernate OGM избра да съсредоточи усилията си около JPA, докато екипът на Spring Data изрично не го направи. Причините са следните:
- JPA е по своята същност релационен API. Първите две изречения от спецификацията посочват, че това е API за обектно-релационно картографиране. Това също е въплътено в основните теми на API:говори се за таблици, колони, присъединявания, транзакции. Концепции, които не са непременно преносими в света на NoSQL.
- Обикновено избирате NoSQL хранилище поради неговите специални характеристики (напр. геопространствени заявки в MongoDB, възможност за извършване на обхождане на графики за Neo4j). Нито един от тях не е (и ще бъде) наличен в JPA, така че така или иначе ще трябва да предоставите собствени разширения.
- Още по-лошо, JPA включва концепции, които просто ще насочват потребителите в грешни посоки, ако те приемат, че работят върху NoSQL магазин, както са били дефинирани в JPA:как трябва да се приложи връщане назад на транзакция разумно върху MongoDB?
Така че с Spring Data избрахме по-скоро да предоставим последователен модел на програмиране за поддържаните магазини, но не се опитвайте да принудите всичко в един прекомерно абстрагиращ API:получавате добре познатите реализации на шаблони, получавате абстракцията на хранилището, която работи идентично за всички магазини, но ви позволява да използвате специфични функции и концепции на магазина.