一、该问题的重现步骤是什么?
1. 使用sqlserver数据库执行如下语句报错:
WITH DeptPath AS (
SELECT
CONVERT(VARCHAR, d.id) AS id,
d.parent_id
FROM blade_dept d
WHERE d.id = #{dept_id}
AND d.is_deleted = 0
UNION ALL
SELECT
CONVERT(VARCHAR, p.id) AS id,
p.parent_id
FROM blade_dept p
INNER JOIN DeptPath c
ON p.id = c.parent_id
WHERE p.is_deleted = 0
)
SELECT id
FROM DeptPath
OPTION (MAXRECURSION 100);
报错内容是:"nested exception is org.apache.ibatis.exceptions.PersistenceException: \r\n### Error querying database. Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process";
解决方式是不是就是加一个@InterceptorIgnore(tenantLine = "true")注解,加上之后我的业务是多租户的,会不会因为这个注解,会产生新的租户问题错误?
二、你期待的结果是什么?实际看到的又是什么?
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
四、请提供详细的错误堆栈信息,这很重要。
五、若有更多详细信息,请在下面提供。
完整的错误信息看一下,另外你是需要租户过滤还是不需要过滤?
需要租户隔离的;租户隔离的话,能否就是在sql里直接加tenant_id = ?,再就上刚才的注解是不是也会避免错误?错误完整信息如下:
{
"code": 500,
"success": false,
"data": {},
"msg": "nested exception is org.apache.ibatis.exceptions.PersistenceException: \r\n### Error querying database. Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: WITH DeptPath AS (\n SELECT\n CONVERT(VARCHAR, d.id) AS id,\n d.parent_id\n FROM blade_dept d\n WHERE d.id = ?\n AND d.is_deleted = 0\n UNION ALL\n SELECT\n CONVERT(VARCHAR, p.id) AS id,\n p.parent_id\n FROM blade_dept p\n INNER JOIN DeptPath c\n ON p.id = c.parent_id\n WHERE p.is_deleted = 0\n )\n SELECT id\n FROM DeptPath\n OPTION (MAXRECURSION 100);\r\n### Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Failed to process, Error SQL: WITH DeptPath AS (\n SELECT\n CONVERT(VARCHAR, d.id) AS id,\n d.parent_id\n FROM blade_dept d\n WHERE d.id = ?\n AND d.is_deleted = 0\n UNION ALL\n SELECT\n CONVERT(VARCHAR, p.id) AS id,\n p.parent_id\n FROM blade_dept p\n INNER JOIN DeptPath c\n ON p.id = c.parent_id\n WHERE p.is_deleted = 0\n )\n SELECT id\n FROM DeptPath\n OPTION (MAXRECURSION 100);"
}
如果你是自己写的sql,可以直接把tenantId的条件写到sql里,不需要通过租户插件
那最终解决方式就是在mapper上加个
注解;然后再sql语句中加上tenantId就可以了呗;
扫一扫访问 Blade技术社区 移动端