首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过hibernate orm获取java.lang.reflect.UndeclaredThrowableException

通过hibernate orm获取java.lang.reflect.UndeclaredThrowableException
EN

Stack Overflow用户
提问于 2010-11-19 21:10:04
回答 1查看 6.7K关注 0票数 1

我有一个以hibernate ORM为参数的方法的HibernateInterceptor

当方法被调用时,我会得到java.lang.reflect.UndeclaredThrowableException。原因如下所示

原因:$Proxy25.saveData(com.test.orm.Employee$$EnhancerByCGLIB$$bcc67d7,java.util.HashMap:java.lang.NoSuchMethodException)

saveData(com.test.orm.Employee,java.util.HashMap)是我的方法。

下面是我的拦截器方面代码

代码语言:javascript
复制
 @Around(“@target (com.test.HibernateInterceptorRequired)”)
    public Object interceptCall(ProceedingJoinPoint joinPoint) throws Throwable {
    ProxyFactory proxyFactory = new ProxyFactory(joinPoint.getTarget());
    proxyFactory.addAdvice(hibernateInterceptor);

    Class [] classArray = new Class[joinPoint.getArgs().length];
    for (int i = 0; i < classArray.length; i++)
    classArray[i] = joinPoint.getArgs()[i].getClass();

    return
    proxyFactory
    .getProxy()
    .getClass()
    .getDeclaredMethod(joinPoint.getSignature().getName(), classArray)
    .invoke(proxyFactory.getProxy(), joinPoint.getArgs());
    }

请帮我解决这个问题。

EN

回答 1

Stack Overflow用户

发布于 2010-11-19 21:20:19

我想问题出在这里:

代码语言:javascript
复制
classArray[i] = joinPoint.getArgs()[i].getClass(); 

您使用实际参数的类来构建要查找的方法签名,因此最终得到的签名如$Proxy25.saveData(com.test.orm.Employee$$EnhancerByCGLIB$$bcc67d7, java.util.HashMap)与实际签名不匹配。

也许你需要用ProceedingJoinPoint.getSignature()做点什么,就像这样:

代码语言:javascript
复制
Method m = ((MethodSignature) pjp.getSignature()).getMethod();
return m.invoke(proxyFactory.getProxy(), joinPoint.getArgs()); 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4225300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档