当前使用版本(必填,否则不予处理)
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