我正在尝试找到一种在Java中实现通用搜索API的好方法,这将允许我的用户搜索后端存储库而无需知道后端技术是什么,因此如果将来我们切换供应商我可以重新实现底层逻辑,而无需重新编码API。下面的存储库可以是关系数据库或文档存储,如SOLR,CouchDB,MongoDB等......它需要支持所有典型的搜索要求,如通配符,范围,按位运算符等。
是否有任何标准方法可以解决此问题?
JPA是我最好的选择吗?它会做我需要的一切,包括非关系型数据库吗?
提前致谢!
答案 0 :(得分:1)
你需要的是像Hibernate这样的ORM框架,如果你选择JPA,你需要重新发明很多轮子。
使用Hibernate,您可以编写用于搜索后端数据库或存储库的业务逻辑,而无需特定于供应商的实现,如果以后需要更改后端,则可以在不影响现有业务代码实现的情况下执行此操作。
我建议您查看hibernate documentation以获取进一步的参考资料
答案 1 :(得分:1)
Spring Data项目保护伞提供了一个名为CrudRepository
的漂亮的DAO抽象。我相信大多数子项目(JPA,MongoDB等)提供了一些实现。
答案 2 :(得分:1)
JPA将是您用于将关系数据库映射到对象的众多实现之一。它不会保护您免受数据库更改的影响。
我认为你正在寻找DAO Pattern。我正在做的事情如下:
这样,任何地方的代码都无法触及数据库特定的实现。连接仅以XML形式形成。
答案 3 :(得分:1)
JPA仅围绕RDBMS设计。将它用于其他类型的数据存储是没有意义的,因为事情喜欢它的查询语言泄漏SQL语法。 JDO专为数据存储区的敏捷性而设计,并使用DataNucleus等实现为许多数据存储区提供持久性,但并非所有这些都提到过。
答案 4 :(得分:0)
JPA是围绕RDBMS设计的,Hibernate也是为RDBMS设计的。很少有JPA的实现支持no-sql。类似的项目是围绕hibernate构建的,以支持无sql数据库。然而,API本身已针对RDBMS进行了调整。
实现DAO模式需要您编写自己的查询API。稍后在数据存储发生变化时扩展实现。
JDO和DataNucleus是为异构数据存储而设计的。已经有十几家商店和RDBMS的支持。美是查询api在商店中保持不变。 JDO允许您使用域模型并将存储详细信息留给DataNucleus等实现。
因此我建议JDO api使用datanucleus。 以下链接提供了DataNucleus中已有的列表数据存储和f功能 http://www.datanucleus.org/products/accessplatform_3_0/datastore_features.html