mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-06 16:48:24 +08:00
!526 fix:TenantFactory.withoutTenantCondition 在修改时 无效
Merge pull request !526 from tangxin/main
This commit is contained in:
commit
7796f970b0
@ -616,6 +616,7 @@ public class TableInfo {
|
||||
public Set<String> obtainUpdateColumns(Object entity, boolean ignoreNulls, boolean includePrimary) {
|
||||
MetaObject metaObject = EntityMetaObject.forObject(entity, reflectorFactory);
|
||||
Set<String> columns = new LinkedHashSet<>(); // 需使用 LinkedHashSet 保证 columns 的顺序
|
||||
boolean isIgnoreTenantCondition = TenantManager.isIgnoreTenantCondition();
|
||||
if (entity instanceof UpdateWrapper) {
|
||||
Map<String, Object> updates = ((UpdateWrapper) entity).getUpdates();
|
||||
if (updates.isEmpty()) {
|
||||
@ -629,8 +630,13 @@ public class TableInfo {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 过滤乐观锁字段 和 租户字段
|
||||
if (ObjectUtil.equalsAny(column, versionColumn, tenantIdColumn)) {
|
||||
// 忽略租户字段时 不要过滤租户字段
|
||||
if(isIgnoreTenantCondition){
|
||||
if (Objects.equals(column, versionColumn)) {
|
||||
continue;
|
||||
}
|
||||
// 过滤乐观锁字段 和 租户字段
|
||||
}else if (ObjectUtil.equalsAny(column, versionColumn, tenantIdColumn)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -654,8 +660,13 @@ public class TableInfo {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 过滤乐观锁字段 和 租户字段
|
||||
if (ObjectUtil.equalsAny(column, versionColumn, tenantIdColumn)) {
|
||||
// 忽略租户字段时 不要过滤租户字段
|
||||
if(isIgnoreTenantCondition){
|
||||
if (Objects.equals(column, versionColumn)) {
|
||||
continue;
|
||||
}
|
||||
// 过滤乐观锁字段 和 租户字段
|
||||
}else if (ObjectUtil.equalsAny(column, versionColumn, tenantIdColumn)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -679,6 +690,7 @@ public class TableInfo {
|
||||
public Object[] buildUpdateSqlArgs(Object entity, boolean ignoreNulls, boolean includePrimary) {
|
||||
|
||||
List<Object> values = new ArrayList<>();
|
||||
boolean isIgnoreTenantCondition = TenantManager.isIgnoreTenantCondition();
|
||||
if (entity instanceof UpdateWrapper) {
|
||||
Map<String, Object> updates = ((UpdateWrapper) entity).getUpdates();
|
||||
if (updates.isEmpty()) {
|
||||
@ -691,8 +703,13 @@ public class TableInfo {
|
||||
if (onUpdateColumns != null && onUpdateColumns.containsKey(column)) {
|
||||
continue;
|
||||
}
|
||||
// 过滤乐观锁字段 和 租户字段
|
||||
if (ObjectUtil.equalsAny(column, versionColumn, tenantIdColumn)) {
|
||||
// 忽略租户字段时 不要过滤租户字段
|
||||
if(isIgnoreTenantCondition){
|
||||
if (Objects.equals(column, versionColumn)) {
|
||||
continue;
|
||||
}
|
||||
// 过滤乐观锁字段 和 租户字段
|
||||
}else if (ObjectUtil.equalsAny(column, versionColumn, tenantIdColumn)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -739,8 +756,13 @@ public class TableInfo {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 过滤乐观锁字段 和 租户字段
|
||||
if (ObjectUtil.equalsAny(column, versionColumn, tenantIdColumn)) {
|
||||
// 忽略租户字段时 不要过滤租户字段
|
||||
if(isIgnoreTenantCondition){
|
||||
if (Objects.equals(column, versionColumn)) {
|
||||
continue;
|
||||
}
|
||||
// 过滤乐观锁字段 和 租户字段
|
||||
}else if (ObjectUtil.equalsAny(column, versionColumn, tenantIdColumn)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@ -66,6 +66,12 @@ public class TenantManager {
|
||||
ignoreFlags.set(Boolean.TRUE);
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否忽略 tenant 条件
|
||||
*/
|
||||
public static boolean isIgnoreTenantCondition() {
|
||||
return Boolean.TRUE.equals(ignoreFlags.get());
|
||||
}
|
||||
|
||||
/**
|
||||
* 恢复 tenant 条件
|
||||
@ -83,8 +89,7 @@ public class TenantManager {
|
||||
}
|
||||
|
||||
public static Object[] getTenantIds(String tableName) {
|
||||
Boolean ignoreFlag = ignoreFlags.get();
|
||||
if (ignoreFlag != null && ignoreFlag) {
|
||||
if (isIgnoreTenantCondition()) {
|
||||
return null;
|
||||
}
|
||||
return tenantFactory != null ? tenantFactory.getTenantIds(tableName) : null;
|
||||
|
||||
@ -24,6 +24,7 @@ import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
|
||||
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.util.Date;
|
||||
|
||||
public class TenantTester {
|
||||
|
||||
@ -53,6 +54,23 @@ public class TenantTester {
|
||||
|
||||
mapper.selectAll().forEach(System.out::println);
|
||||
|
||||
TenantAccount bean = new TenantAccount();
|
||||
bean.setTenantId(3L);
|
||||
bean.setUserName("test");
|
||||
bean.setAge(10);
|
||||
bean.setBirthday(new Date());
|
||||
bean.setId(102L);
|
||||
|
||||
TenantManager.withoutTenantCondition(() -> mapper.insert(bean , true));
|
||||
bean.setTenantId(4L);
|
||||
TenantManager.withoutTenantCondition(() -> mapper.update(bean , true));
|
||||
bean.setTenantId(4L);
|
||||
mapper.update(bean , true);
|
||||
TenantManager.setTenantFactory(() -> new Object[]{1, 2,4});
|
||||
mapper.selectAll().forEach(System.out::println);
|
||||
TenantAccount tenantAccount = mapper.selectOneById(102L);
|
||||
mapper.deleteById(102L);
|
||||
assert tenantAccount.getTenantId() == 4;
|
||||
// mapper.selectListByQuery(QueryWrapper.create()
|
||||
// .select(TENANT_ACCOUNT.ALL_COLUMNS)
|
||||
// .from(TENANT_ACCOUNT.as("c"), ACCOUNT.as("b"))
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user