fix: 基于 getter 方法获取属性类型,以支持泛型。

This commit is contained in:
Suomm 2023-06-13 14:55:21 +08:00
parent 85a11fae9d
commit ac69fe08a3

View File

@ -48,7 +48,8 @@ import java.util.stream.Collectors;
public class TableInfoFactory { public class TableInfoFactory {
private TableInfoFactory() {} private TableInfoFactory() {
}
private static final Set<Class<?>> defaultSupportColumnTypes = CollectionUtil.newHashSet( private static final Set<Class<?>> defaultSupportColumnTypes = CollectionUtil.newHashSet(
int.class, Integer.class, int.class, Integer.class,
@ -132,7 +133,8 @@ public class TableInfoFactory {
TableInfo tableInfo = new TableInfo(); TableInfo tableInfo = new TableInfo();
tableInfo.setEntityClass(entityClass); tableInfo.setEntityClass(entityClass);
tableInfo.setReflector(new Reflector(entityClass)); Reflector reflector = new Reflector(entityClass);
tableInfo.setReflector(reflector);
//初始化表名 //初始化表名
Table table = entityClass.getAnnotation(Table.class); Table table = entityClass.getAnnotation(Table.class);
@ -205,7 +207,7 @@ public class TableInfoFactory {
continue; // ignore continue; // ignore
} }
Class<?> fieldType = field.getType(); Class<?> fieldType = reflector.getGetterType(field.getName());
//满足一下 3 中情况不支持该类型 //满足一下 3 中情况不支持该类型
if ((column == null || column.typeHandler() == UnknownTypeHandler.class) // 未配置 typeHandler if ((column == null || column.typeHandler() == UnknownTypeHandler.class) // 未配置 typeHandler
@ -281,7 +283,7 @@ public class TableInfoFactory {
Id id = field.getAnnotation(Id.class); Id id = field.getAnnotation(Id.class);
ColumnInfo columnInfo; ColumnInfo columnInfo;
if (id != null) { if (id != null) {
columnInfo = new IdInfo(columnName, field.getName(), field.getType(), id); columnInfo = new IdInfo(columnName, field.getName(), fieldType, id);
idInfos.add((IdInfo) columnInfo); idInfos.add((IdInfo) columnInfo);
} else { } else {
columnInfo = new ColumnInfo(); columnInfo = new ColumnInfo();
@ -290,7 +292,7 @@ public class TableInfoFactory {
columnInfo.setColumn(columnName); columnInfo.setColumn(columnName);
columnInfo.setProperty(field.getName()); columnInfo.setProperty(field.getName());
columnInfo.setPropertyType(field.getType()); columnInfo.setPropertyType(fieldType);
if (column != null && column.typeHandler() != UnknownTypeHandler.class) { if (column != null && column.typeHandler() != UnknownTypeHandler.class) {
Class<?> typeHandlerClass = column.typeHandler(); Class<?> typeHandlerClass = column.typeHandler();
@ -302,7 +304,7 @@ public class TableInfoFactory {
ColumnMask columnMask = field.getAnnotation(ColumnMask.class); ColumnMask columnMask = field.getAnnotation(ColumnMask.class);
if (columnMask != null && StringUtil.isNotBlank(columnMask.value())) { if (columnMask != null && StringUtil.isNotBlank(columnMask.value())) {
if (String.class != field.getType()) { if (String.class != fieldType) {
throw new IllegalStateException("@ColumnMask() only support for string type field. error: " + entityClass.getName() + "." + field.getName()); throw new IllegalStateException("@ColumnMask() only support for string type field. error: " + entityClass.getName() + "." + field.getName());
} }
columnInfo.setMaskType(columnMask.value().trim()); columnInfo.setMaskType(columnMask.value().trim());