private static Map<String, MethodHandle> parseSetterMethods(List<Class<?>> classes) {
        Map<String, MethodHandle> setterMethods = null;
        for (Class<?> clazz : classes) {
            for (Method method : clazz.getDeclaredMethods()) {
                if (!method.isAnnotationPresent(PropertySetter.class)) {
                    continue;
                }
                if (setterMethods == null) {
                    setterMethods = new HashMap<>(8);
                }
                String methodName = method.getName();
                if (!methodName.startsWith("set")) {
                    throw new IllegalArgumentException(
                            "The setter method name must start with \"set\"");
                }
                String propertyName =
                        StringUtil.upperCamelToLowerCamelLatin1(methodName.substring(3));
                setterMethods.put(propertyName, ReflectionUtil.method2Handle(method));
            }
        }
        return setterMethods == null
                ? Collections.emptyMap()
                : setterMethods;
    }
@implNote The method doesn't the support shard keys that contains a hashed key supported in
          4.4
turms-server-common/src/main/java/im/turms/server/common/storage/mongo/entity/MongoEntityFactory.java