2

我使用spring boot,从数据库中查询如下:

@Repository
public interface MyRepository extends CrudRepository<MyEntity, Integer> {
  List<MyEntity> findAllByIdIn(List<Integer> ids);
}

我想动态调用这个方法“findAllByIdIn”:

Object bean = context.getBean("myRepository");
bean.getClass().getMethod("findAllByIdIn").invoke(bean, ids);

我有一个例外:

java.lang.NoSuchMethodException: com.sun.proxy.$Proxy145.findAllByIdIn()

如何调用该方法?

4

2 回答 2

3

getMethod接受 2 个参数。第一个是方法名称,第二个是方法参数类型的可变参数。

您的代码尝试获取findAllByIdIn不带参数的方法,但您的存储库没有它。

所以解决方法是:

bean.getClass().getMethod("findAllByIdIn", List.class)
于 2018-12-03T09:35:03.063 回答
1

从错误java.lang.NoSuchMethodException: com.sun.proxy.$Proxy145.findAllByIdIn()中可以清楚地看出,您的代码正在尝试获取一个没有参数的方法,而该方法实际上并不存在。

所以尝试传递参数,因为它期望像下面这样的参数。

getMethod("findAllByIdIn",List.class)
于 2018-12-03T09:27:55.723 回答