java使用Spring数据JPA/MongoDB交叉存储,一个查询可以跨越两个数据库吗?
我正在使用mongodb客户服务数据示例(可从https://github.com/SpringSource/spring-data-document-examples获得)
该示例使用@RelatedDocument跨数据库关联域对象。它允许足够好地存储和更新对象
但是,我想对JPA数据库(在示例HSQLDB中)和MongoDB执行一个具有条件的查询
这可能吗?有没有任何例子证明这是可能的
与该问题不直接相关的评论:
我的用例是我们的应用程序是一个Oracle DB,但我们现在开始接收半结构化数据。JPA实体可由用户在某些约束条件下进行过滤,但我们希望将此功能扩展到半结构化数据
似乎还有竞争技术QueryDSL和EclipseLink,但我找不到任何关于跨数据库查询的技术
在JPA中,似乎不可能进行跨数据库查询,因为每个数据库都有不同的PersistanceUnits。然而,mongodb交叉存储似乎否定了这个特殊问题
# 1 楼答案
我从未使用过Spring数据JPA,但如果JPA不能做到这一点,我怀疑Spring数据是否能提供这样的功能
我不知道你对mongodb cross store了解多少。所以我将很快解释mongodb可以做什么和不能做什么
使用mongodb时,不能跨多个集合(表)进行查询,因此不能使用普通mongodb进行连接。所以@RelatedDocument是Spring Data提供的一个特性。相关文档可能是嵌入的(不知道Spring数据是否支持),也可能是其他集合(和数据库)中文档的简单DBRef。使用DBRef,您只能查询@RelatedDocument字段,如_id、collection和database,但不能查询实际引用的documents属性
这意味着mongodb不允许在单个查询中搜索跨数据库,因为不能跨集合进行查询,所以也不能针对数据库进行查询。你唯一的跨店功能是针对碎片收藏。有了这个,你就可以通过shardkey将集合分布在多个节点上。MongoDB可能需要跨所有集合碎片进行查询才能完成查询。但除此之外,我不会称之为真正的跨数据库功能,您没有这样的功能
如果这没有帮助,请更详细地解释你想做什么