diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/util/ClassUtil.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/util/ClassUtil.java index 3c7a57a8..22b5f34b 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/util/ClassUtil.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/util/ClassUtil.java @@ -26,6 +26,7 @@ import java.lang.reflect.Proxy; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Optional; import java.util.function.Predicate; /** @@ -165,8 +166,14 @@ public class ClassUtil { } // 没有任何构造函数的情况下,去查找 static 工厂方法,满足 lombok 注解的需求 else { + // #issues-259 通过ModifyAttrsRecordProxyFactory.get方法调用时,会给实体类创建一个代理类, + // clazz就是这个代理类,下面判断clazz == m.getReturnType()时就为false,所以在这里加了个判断如果是代理类,就获取其父类 + Optional isProxy = Arrays.stream(clazz.getGenericInterfaces()) + .filter(ProxyObject.class::isInstance) + .findAny(); + final Class entityClass = isProxy.isPresent() ? (Class) clazz.getGenericSuperclass() : clazz; Method factoryMethod = ClassUtil.getFirstMethod(clazz, m -> m.getParameterCount() == 0 - && clazz == m.getReturnType() + && entityClass == m.getReturnType() && Modifier.isPublic(m.getModifiers()) && Modifier.isStatic(m.getModifiers())); if (factoryMethod != null) {