Mybatis 3.0.7.1 插入数据 Column 'tenant_id' specified twice - 华夏 ERP 二次开发
新项目选择 华夏 ERP 做二次开发
开源版有完整的进销存模块,没有生产,而项目也不需要,正好符合要求。
主要工作是针对商品以及仓库管理功能做一些字段调整。
在修改了仓库新增 Model 字段后,多次调整修复报错之后,出现这个 Column 'tenant_id' specified twice
报错。
百度了一下,说是多租户插件会出现这个报错,主要是自定义插入 tenant_id 与 Mybatis 扩展里处理插入时自动插入 tenant_id 重复插入字段赋值有关。插入操作的列里会存在两个 tenant_id 字段,这就导致了报错发生。
根据网上的提示分别找到这两个部分:
自定义的 新增客户时给当前用户自动授权
- setUserCustomerPermission()
:
// 与 mybatis 多租户字段冲突 "Column 'tenant_id' specified twice"
String token = request.getHeader("X-Access-Token");
Long tenantId = Tools.getTenantIdByToken(token);
if(tenantId!=0L) {
userBusiness.setTenantId(tenantId);
}
mybatis 扩展包 com.baomidou.mybatisplus.extension.plugins.tenant.TenantSqlParser.class
:
public void processInsert(Insert insert) {
...
insert.getColumns().add(new Column(this.tenantHandler.getTenantIdColumn()));
...
网上的教程大致有三种方法:
- 租户字段不要放 entity 里, 或者不要自己 set 值
- 升级 mybatis-plus 版本为 3.4.1 或者之后的版本(据说高版本已经修复重复插入列 tenant_id 的问题)
- 自定义拦截器 TenantConfig 设置 TenantSqlParser 解析器并重写 processInsert 方法
虽然其他方法都有现成的教程写法,但我还是选择了最简单的方法,去掉自定义的 set 值部分。
注释掉自定义 set 值部分,重启应用,插入成功!
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。