当前使用版本(必填,否则不予处理)
3.5.1
该问题是如何引起的?(确定最新版也有问题再提!!!)
程序连接了多个数据库,不同的数据库多租户字段名称不一致,于是同时添加了多个 TenantLineInnerInterceptor 的实现,导致最终的SQL语句中,A方案中表,添加了B方案中的租户ID。
重现步骤(如果有就写完整)
- 实现2个不同的
TenantLineInnerInterceptor getTenantIdColumn方法返回不同的字段名称- 在
MybatisPlusInterceptor中同时添加上面实现的TenantLineInnerInterceptor - 编写Mapper,查询数据
- 启动程序,发送请求
报错信息
·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