当前使用版本(必填,否则不予处理)

3.5.1

该问题是如何引起的?(确定最新版也有问题再提!!!)

程序连接了多个数据库,不同的数据库多租户字段名称不一致,于是同时添加了多个 TenantLineInnerInterceptor 的实现,导致最终的SQL语句中,A方案中表,添加了B方案中的租户ID。

重现步骤(如果有就写完整)

  1. 实现2个不同的 TenantLineInnerInterceptor
  2. getTenantIdColumn 方法返回不同的字段名称
  3. MybatisPlusInterceptor 中同时添加上面实现的 TenantLineInnerInterceptor
  4. 编写Mapper,查询数据
  5. 启动程序,发送请求

报错信息

·nested exception is java.sql.SQLSyntaxErrorException: Unknown column 'table_name.tenant_id' in 'where clause'·

额外说明

  • 每张表只有一个表示租户ID的字段
  • 两张表各自的租户ID字段名称不一样

建议

获取到租户ID之后,应当判断在当前表中是否存在,若当前Table中都没有该字段,则应该忽略;若同时注册了其他的 TenantLineInnerInterceptor,还应该继续使用下一个 TenantLineInnerInterceptor 进行处理。

Comment From: Hccake

思路有问题。

注册一个 TenantLineHandler,修改其 getTenantIdColumn 方法,根据不同数据源切换返回的租户列名称即可

Comment From: qmdx

多租户没有你这种的,你要这样你可以自行从写租户逻辑以前的 EQ 条件改为 IN