使用sqlserver数据库,mybatis报错

Blade 未结 1 74

一、该问题的重现步骤是什么?

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")注解,加上之后我的业务是多租户的,会不会因为这个注解,会产生新的租户问题错误?


二、你期待的结果是什么?实际看到的又是什么?


三、你正在使用的是什么产品,什么版本?在什么操作系统上?


四、请提供详细的错误堆栈信息,这很重要。


五、若有更多详细信息,请在下面提供。

1条回答
  • 完整的错误信息看一下,另外你是需要租户过滤还是不需要过滤?

    作者追问:2天前

    需要租户隔离的;租户隔离的话,能否就是在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);"

    }


    回答: 2天前

    如果你是自己写的sql,可以直接把tenantId的条件写到sql里,不需要通过租户插件

    作者追问:2天前

    那最终解决方式就是在mapper上加个image.png注解;然后再sql语句中加上tenantId就可以了呗;

    0 讨论(0)
提交回复