根因找到了,是多租户拦截器搞的鬼。
---
## 真正根因:多租户插件注入了 `tenant_id` 条件
日志中的异常堆栈非常明确:
```
java.sql.SQLSyntaxErrorException: Unknown column 'tenant_id' in 'where clause'
实际生成 SQL:
SELECT COUNT(*) AS total FROM archive_interface_user WHERE deleted = 0 AND tenant_id = 1
```
`deleted = 0` 在补全列后已正常工作,但 **`tenant_id = 1` 是项目多租户插件 `TenantDatabaseInterceptor` 自动注入的**,而 `archive_interface_user` 表没有这个列。
---
### 拦截器判定逻辑
多租户插件对每张表依次判断:
| 条件 | InterfaceUserDO 的结果 |
|---|---|
| ① `TableInfo` 是否为 null | 否(有 `@TableName`) |
| ② 是否继承 `TenantBaseDO` | 否(继承的是 `BaseDO`) |
| ③ 是否标注 `@TenantIgnore` | 否(没加) |
三个条件全不满足 → `ignoreTable` 返回 false → 强制追加 `AND tenant_id = 1` → 表缺列 → 500。
---
### 修复方案
**推荐:给 `InterfaceUserDO` 加 `@TenantIgnore` 注解**(该表是 OA 同步账号配置表,不需要租户隔离,侵入性最小):
```java
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
@TableName("archive_interface_user")
@KeySequence("archive_interface_user_seq")
@TenantIgnore // ← 加这一行即可
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class InterfaceUserDO extends BaseDO {
// ...
}
```

2517

被折叠的 条评论
为什么被折叠?



