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