Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa 如何从数据服务中提取数据库存储库?_Jpa_Nosql_Spring Data_Spring Data Jpa_Spring Data Mongodb - Fatal编程技术网

Jpa 如何从数据服务中提取数据库存储库?

Jpa 如何从数据服务中提取数据库存储库?,jpa,nosql,spring-data,spring-data-jpa,spring-data-mongodb,Jpa,Nosql,Spring Data,Spring Data Jpa,Spring Data Mongodb,我阅读本文是为了理解数据服务层如何独立于数据库(RDBMS/NoSQL)。看起来没有办法将实体和存储库设计为独立于数据库。这篇文章是在2012年写的。从那以后,我们还有其他技术实现了这一功能吗?在回答您的问题之前,我必须问:您为什么要这样做?三思而后行,因为抽象是要付出代价的,仅仅为了拥有一个“干净”的设计而这样做肯定是不值得的 现在谈谈你的问题: 没有现成的库或框架可以做到这一点 可能最接近它的是spring数据,您显然已经意识到了这一点。如果您坚持使用与持久性存储无关的接口,那么您的存储库将

我阅读本文是为了理解数据服务层如何独立于数据库(RDBMS/NoSQL)。看起来没有办法将实体和存储库设计为独立于数据库。这篇文章是在2012年写的。从那以后,我们还有其他技术实现了这一功能吗?

在回答您的问题之前,我必须问:您为什么要这样做?三思而后行,因为抽象是要付出代价的,仅仅为了拥有一个“干净”的设计而这样做肯定是不值得的

现在谈谈你的问题:

  • 没有现成的库或框架可以做到这一点

  • 可能最接近它的是spring数据,您显然已经意识到了这一点。如果您坚持使用与持久性存储无关的接口,那么您的存储库将至少在某种程度上对持久性存储使用进行抽象。但是:您必须提供不同种类的元数据(通常作为实体上的注释)才能使其工作。所以从这个意义上说,它是一个真正的漏洞百出的抽象

  • 当然,您可以自己动手:创建一个包含所需操作的接口,并为您想要使用的不同数据存储提供实现。此外,还包括一种独立于存储的元数据提供方式

  • 所以问题变成了:为什么还没有人这么做?为什么你也不应该这么做

  • 这很难:仅仅以所有(相关)SQL数据库都能理解的方式编写SQL是很困难的

  • 你失去了很多商店的权力。例如,RDBMSE非常擅长加入stuff。但对于许多无SQL数据库来说,加入基本上是不可能的。因此,您的API可能不应该提供此功能。这基本上将所有内容简化为公共分母,当您有非常不同的数据存储时,公共分母将非常小

  • 这不值得。这又回到了我的开场白:你为什么要这么做?我当然看到了切换不同RDBMS的用途。一些公司只希望在他们的数据中心中有特定的供应商,最好有一个内存中的变体用于测试等等。但将存储从Oracle切换到Hazelcast,然后再切换到MongoDB到CSV?你为什么要这么做?它的商业价值是什么


  • 当我读到Tinder软件工程时,这个问题一直困扰着我。看起来他们在迁移到mongoDB之前使用了RDBMS。我开始思考在不修改实体的情况下该如何做。好奇,没有真正的用例。