java.lang.IllegalArgumentException:使用 setResultTransformer(休眠)的参数类型不匹配

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/14869143/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 17:41:55  来源:igfitidea点击:

java.lang.IllegalArgumentException: argument type mismatch using setResultTransformer (hibernate)

javahibernate

提问by mrjayviper

Well I'm trying to cast my list of objects into a class and I'm getting the error above (full error details below). I've looked around and tried suggestions but can't see anything wrong. I've tried putting a breakpoint in the POJO class but it didn't work. I guess breakpoints doesn't work when it comes to web apps.

好吧,我正在尝试将我的对象列表转换为一个类,但我收到了上面的错误(完整的错误详细信息如下)。我环顾四周并尝试了建议,但没有发现任何问题。我试过在 POJO 类中放置一个断点,但没有用。我想断点在网络应用程序方面不起作用。

The field I'm retrieving (instance_id) is declared as number in the Oracle 11GR2 DB.

我正在检索的字段 ( instance_id) 在 Oracle 11GR2 DB 中声明为数字。

Can you please help?

你能帮忙吗?

my native query (defined in my hbm file and I've tried it with and without return-scalar)

我的本机查询(在我的 hbm 文件中定义,我已经尝试过使用和不使用返回标量)

<sql-query name="getEventSessionsForFab1">
    <return-scalar column="instanceId" type="long" />

    <![CDATA[select eventInstance.instance_id as "instanceId" from events event, event_instances eventInstance where event.event_id = eventInstance.event_id and eventInstance.start_date_time > sysdate and (eventInstance.register_cutoff_date >= sysdate or eventInstance.register_cutoff_date is null) and (lower(event.event_name) like :eventName or event.event_id = 1)]]>
</sql-query>

my java code

我的Java代码

List<EventSession> eventSessionList1 = sessionFactory.getCurrentSession()
                        .getNamedQuery("getEventSessionsForFab1")
                        .setParameter("eventName", "%" + (lovList.size() > 0 ? lovList.get(0).getCode().toLowerCase() : "general") + "%")
                        .setResultTransformer(Transformers.aliasToBean(EventSession.class))
                        .list();

my java class (there used to be more fields here but I retained only 1 for testing)

我的 java 类(这里曾经有更多的字段,但我只保留了 1 个用于测试)

package com.myapps.issu.models.database;

public class EventSession {
    private Integer instanceId;

    public Integer getInstanceId() {
        return instanceId;
    }
    public void setInstanceId(Integer instanceId) {
        this.instanceId = instanceId;
    }

}

full error message as displayed in eclipse console

Eclipse 控制台中显示的完整错误消息

Feb 14, 2013 5:01:06 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [spring] in context with path [/issu] threw exception [Request processing failed; nested exception is org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of com.myapps.issu.models.database.EventSession.instanceId] with root cause
java.lang.IllegalArgumentException: argument type mismatch
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:65)
    at org.hibernate.transform.AliasToBeanResultTransformer.transformTuple(AliasToBeanResultTransformer.java:95)
    at org.hibernate.hql.internal.HolderInstantiator.instantiate(HolderInstantiator.java:95)
    at org.hibernate.loader.custom.CustomLoader.getResultList(CustomLoader.java:395)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2227)
    at org.hibernate.loader.Loader.list(Loader.java:2222)
    at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:331)
    at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:1783)
    at org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:231)
    at org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:156)
    at com.myapps.issu.dao.IssuDaoImpl.getEventSessionsForFab(IssuDaoImpl.java:122)
    at com.myapps.issu.services.IssuServiceImpl.getEventSessionsForFab(IssuServiceImpl.java:125)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:319)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
    at $Proxy13.getEventSessionsForFab(Unknown Source)
    at com.myapps.issu.controllers.IssuController.getEventSessions(IssuController.java:120)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:100)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:604)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:565)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:680)

回答by dsuzette

I looked at the code above, if you change the return-scalar from long to integer the error should go away.

我查看了上面的代码,如果将返回标量从 long 更改为 integer,错误应该会消失。

<sql-query name="getEventSessionsForFab1">
    <return-scalar column="instanceId" type="integer" />
    ...

Hope this helps.

希望这可以帮助。