为什么ORM框架(JAVA的Hibernate和Node.js的Sequelize) 都要有关係才能做join查询呢?

在使用Node.js的Sequelize ORM框架时,如果在查询时加上included表示要做join查询
例如

 db.User.findAll({
            include: [{
              model: db.Message,
              required: true
            }]
          })
          .then((users) => {
            res.json(users);
          })
          .error((error) => {
            res.sendStatus(500);
          });

但如果在一开始定义时没有加上hasMany、belongsTo就会出现
xxx is not aoociated to xxx 的错误讯息

clipboard.png

Google了一会,看起来一定要先定义关係,才能做这种查询了,记得以前在JAVA用Hibernate也是一样的状况。

请问他们这样设计的原因为何?
有什麽替代方桉可以做无关係的join查询吗?

阅读 4.4k
2 个回答

对象之间有关联关系,必须先定义好,然后ORM框架才会根据关系去找相关的数据。

比如说一个部门Department的对象,包含多个User对象,查询Department的时候可以把包含的User查询出来,如果没有定义关联关系,ORM不知道在数据库中两个表的关联字段,无法生成sql语句进行查询。

新手上路,请多包涵

跟你遇到同样的疑惑了。不关联的情况下sql命令行完全可以join查询出来的语句到了sequelize里就必须要设置关联,不然报错。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题