Spring Data MongoDB:如何实现"实体关系"?

dav*_*ooh 23 java spring mongodb spring-data spring-data-mongodb

这个问题的标题是相当矛盾的,因为我试图在非关系数据库中实现关系... :)

但我的意思是如何定义使用MongoDB的应用程序模型类中的实体之间的关联.

使用JPA我经常使用@ManyToMany@OneToMany注释来定义对象之间的关系.Spring Data MongoDB中有类似的东西吗?

研究MongoDB我意识到这种关联有两种可能的方法:参考嵌入数据.

Spring Data使用哪一个?是否可以配置关联模式?

Ign*_*tti 15

您可以使用@DBRef批注将引用的类持久保存在单独的集合中,否则文档将保留在同一文档(json)中.使用DBRef需要对mongodb驱动程序进行额外查询,您应该考虑这个来分析性能问题.

spring数据文档

@DBRef - 在字段中应用以指示使用com.mongodb.DBRef存储它.

7.3.4使用DBRefs映射框架不必存储嵌入在文档中的子对象.您也可以单独存储它们并使用DBRef来引用该文档.当从MongoDB加载对象时,将急切地解析这些引用,并且您将获得一个映射对象,该对象看起来与嵌入在主文档中的对象相同.

  • 小心@DBRef.您将无法对引用的文档使用投影.即`docA = {id:1,anotherDoc:DBRef(id:2)}`和`docB = {id:2,foo:bar}`.现在,您可以在查询`docA`时使用投影,但我不会应用于`docB`.我的意思是,你**不能**做这样的投射`{anotherDoc.foo:0}`.它总是会获取整个`docB`. (2认同)