自定义的实体类和service无法写入tenant_id的值

Blade 未结 1 909
641835480
641835480 2021-03-22 14:45

一、该问题的重现步骤是什么?

       我购买的是商业版授权,使用的是2.7.2的版本,但我在新增实体,写入数据库时,使用postman提交请求,用户为admin,签权也通过,但tenant_id租户字段的值总是为空。我查看生成的Insert语句,根本就没有tenant_id这个字段,而且所有的查询语句都没有根据tenant_id
来过滤数据。

       但我测试框架自带的Notice这个功能的save方法时,又可以正常写入tenant_id的值。

     我的实体类没有从开发文档中说明的TenantEntity超类继承,我自己写了个超类,这个超类里定义有tenantId属性,

  同时我的服务实现类也没有从BaseServiceImpl继承,而是仿BaseServiceImpl自己写了个超类(ServiceImpl继承),该超类中仿BaseServiceImpl中的resolveEntity方法

    我没有在add()方法代码中显示设置tenantId属性,我想问的是,tenantId的值是框架本身自动写入,还是需要手工设置

     这个问题困扰好长时间了,麻烦分析一下原因

截图00.png

    截图01.png


二、你期待的结果是什么?实际看到的又是什么?


三、你正在使用的是什么产品,什么版本?在什么操作系统上?


四、请提供详细的错误堆栈信息,这很重要。


五、若有更多详细信息,请在下面提供。

1条回答
  •  admin
    admin (楼主)
    2021-03-22 16:29

    多租户的tenantId是自动注入的,不需要手动处理,具体处理逻辑流程如下:

     1、BladeTenantHandler类会在工程启动初始化后执行一段逻辑,从mybatis-plus缓存的类中循环,满足如下条件则会加入租户插件启动的逻辑(不在配置排除的表并且entity包含tenantId字段)。具体可以打断点,看下最终的tenantTableList字段是否有你配置的表

    image.png

    image.png

     2、每次调用的时候都会进行判断,当前请求是否需要启动租户插件逻辑

    image.png

     3、最后一步进行判断是否需要自动加上tenantId

     image.png


    最后你可以在这三个核心的方法打断点,在save操作的时候看看是哪一步没有自动把tenantId加上。如果你打完断点还是查不出原因所在,请把你的代码尽可能精简一下打成一个独立的工程demo,发送邮件至 bladejava@qq.com 并且贴上帖子地址,我们会下载调试并追加回复。

    0 讨论(0)
提交回复