使用弹簧配置(注释优先)的mongodb中的多对多

 运儿0315 发布于 2022-12-28 16:53

我正在建模一个模式.由于我是Mongo DB的新手,我不知道如何建模nosql数据库.构建关系类型db并在其上使用mongo不允许我使用多对多映射.

使用Spring数据确实给许多使用提供了一个支持@DBRef在顶部List.但很多人都是我想要的.

任何帮助将深表感谢.请更喜欢使用代码来解释.或者演示结构来说明.提前致谢.

2 个回答
  •  @marianomdq:你的Spring Data代码应该是这样的:......

    当我尝试这个时,将实体保存到数据库没有任何问题.我的问题是再次加载它们.这似乎引起类别的(在这个例子中)负载陷入无限循环类别 - >产品 - >分类 - >机生产线.....直到StackOverflowException异常.

    java.lang.StackOverflowError: null
        at java.lang.reflect.Constructor.newInstance(Constructor.java:416) ~[na:1.8.0_77]
        at java.lang.Class.newInstance(Class.java:442) ~[na:1.8.0_77]
        at com.mongodb.DBCollectionObjectFactory.getInstance(DBCollectionObjectFactory.java:51) ~[mongodb-driver-3.2.2.jar:na]
        at com.mongodb.DBObjectCodec.readDocument(DBObjectCodec.java:340) ~[mongodb-driver-3.2.2.jar:na]
        at com.mongodb.DBObjectCodec.decode(DBObjectCodec.java:136) ~[mongodb-driver-3.2.2.jar:na]
        at com.mongodb.DBObjectCodec.decode(DBObjectCodec.java:61) ~[mongodb-driver-3.2.2.jar:na]
        ........
    

    完整的堆栈跟踪非常大.

    解决方案:延迟加载数据库引用!

    只需将DBRef注释的延迟标志设置为true,这将使加载引用变为惰性.这意味着循环引用不会一次全部加载.

    @DBRef(lazy = true)

    实际上达到这个解决方案的研究很麻烦.因此,我想分享这些信息.

    2022-12-28 16:55 回答
  • 有几种方法可以在MongoDB中实现多对多.

    我认为最简单的是:

    多对多关系场景:

    多对多关系场景

    去标准化后:

    去标准化后的情况

    你的Spring Data代码看起来像这样:

    public class Category {
    
        @Id
        private ObjectId id;
    
        private String category_name;
    
        @DbRef
        private List<Product> products_ids;
    
        // ... getters and setters ...
    
    }
    
    public class Product {
    
        @Id
        private ObjectId id;
    
        private String product_name;
    
        @DbRef
        private List<Category> categories_ids;
    
        // ... getters and setters ...
    
    }
    

    2022-12-28 16:55 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有