当前使用版本(必填,否则不予处理)

3.5.2

该问题是如何引起的?(确定最新版也有问题再提!!!)

  • 在Mapper接口中的default方法上加@InterceptorIgnore(tenantLine = "true")不起作用
  • 使用LambdaQueryWrapper的情况下, 没找到别的设置忽略租户的方式.

重现步骤(如果有就写完整)

@Mapper
public interface XxxMapper extends BaseMapper<XxxPo>
    @InterceptorIgnore(tenantLine = "true")
    default List<XxxPo> selectTimeoutSubmittedCode(final LocalDateTime timeoutNotifyTime) {
        final Date oneHoursBeforeForOracle = Date.from(timeoutNotifyTime.atZone(ZoneId.systemDefault()).toInstant());
        return selectList(Wrappers
                .<XxxPo>lambdaQuery()
                .select(XxxPo::getGid, XxxPo::getTypeCode)
                .lt(XxxPo::getNotifyTime, oneHoursBeforeForOracle)
        );
    }
}

报错信息

没有起到忽略租户的效果(该方法对所有租户的数据生效, 且在计划任务中调用, 所以要忽略)

寻求帮助

希望知道使用lambdaQuery的方式下, 如何按需传递条件忽略多租户

Comment From: qmdx

不支持条件忽略

Comment From: tldzyx

不支持条件忽略

如果不支持的话, 本来可以通过写lambdaQuery的调用, 就只能改成使用xml才行了.

Comment From: 274574162

臣附议,这个问题很尴尬,像后台任务查询根本没有租户,就很尴尬,得自己写

Comment From: zhushizhan

多租户之间完全隔离,不允许这么做的

Comment From: Denny233

我最近也在写这个 我的处理办法是这样 重写TenantLineInnerInterceptor ,TenantLineHandler, 增加过滤接口判断方法 @Override public boolean giveUp() { if (!isWebRequest()) { // 非web线程 return true; } LoginUser loginUser = LoginHelper.getLoginUser(); if (loginUser == null) { // 非登录线程 return true; } Long tenantId = LoginHelper.getTenantId(); if (tenantId == null || tenantId == 0L) { // 登录线程 - 但是是超级管理员组 return true; } return false; }

Comment From: totoro52

可以改写多租户插件的ignore方法,当用户没登录时,默认为无租户状态,即可不需要手写XML, 当然这样得看你系统来设计,像我的是根据域名来判断租户,所以就可以这么干。

Comment From: qmdx

使用最新 3.5.3 版本 ,新增忽略方式 https://baomidou.com/pages/2976a3/#%E6%89%8B%E5%8A%A8%E8%AE%BE%E7%BD%AE%E6%8B%A6%E6%88%AA%E5%99%A8%E5%BF%BD%E7%95%A5%E6%89%A7%E8%A1%8C%E7%AD%96%E7%95%A5