Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法捕获春季的休眠异常_Java_Spring_Hibernate_Spring Transactions - Fatal编程技术网

Java 无法捕获春季的休眠异常

Java 无法捕获春季的休眠异常,java,spring,hibernate,spring-transactions,Java,Spring,Hibernate,Spring Transactions,我不熟悉Spring框架。使用Spring4.3和Hibernate4开发web应用程序 我配置了所需的bean <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${oracle.driver-calss}" /> <

我不熟悉Spring框架。使用Spring4.3和Hibernate4开发web应用程序

我配置了所需的bean

<bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName"
        value="${oracle.driver-calss}" />
    <property name="url" value="${oracle.Url}" />
    <property name="username" value="${oracle.userName}" />
    <property name="password" value="${oracle.password}" />
</bean>

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">${oracle.dialect}</prop>
            <prop key="hibernate.hbm2ddl.auto">${oracle.hbm2ddl}</prop>
            <prop key="hibernate.show-sql">${oracle.show-sql}</prop>
        </props>
    </property>
    <property name="dataSource" ref="dataSource" />
    <property name="packagesToScan" value="com.wmosIIBL.model"></property>
</bean>

<bean id="transactionManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

<tx:annotation-driven />
DAO Impl代码:我故意犯一些错误来创建异常。所以请忽略代码错误,帮助我找到如何捕获抛出的异常

@Repository
public class ItemIBLDaoImpl {

    @Autowired
    SessionFactory sessionFactory;

    public ItemInvnByLcn getIBLByDspLocn(String dspLocn) {
        Session currentSession = sessionFactory.getCurrentSession();
        SQLQuery sqlQuery = currentSession.createSQLQuery("SELECT * FROM WHERE ITEMINVNBYLOCN WHERE LOCATION= :DSPLOCN");
        sqlQuery.setParameter("SDPLOCN", dspLocn);
        List iiblList = sqlQuery.list();
        System.out.println(iiblList.toString());
        return (ItemInvnByLcn) iiblList.get(0);
    }

}
Hibernate正在抛出下面的异常,我无法在服务类中捕获该异常

org.hibernate.QueryParameterException: could not locate named parameter [SDPLOCN]
    at org.hibernate.engine.query.spi.ParameterMetadata.getNamedParameterDescriptor(ParameterMetadata.java:148)
    at org.hibernate.engine.query.spi.ParameterMetadata.getNamedParameterExpectedType(ParameterMetadata.java:165)
    at org.hibernate.internal.AbstractQueryImpl.determineType(AbstractQueryImpl.java:523)
    at org.hibernate.internal.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:493)
    at com.wmosIIBL.dao.ItemIBLDaoImpl.getIBLByDspLocn(ItemIBLDaoImpl.java:22)
    at com.wmosIIBL.service.ItemIBLService.getItemIBLByDspLocn(ItemIBLService.java:22)
    at com.wmosIIBL.service.ItemIBLService$$FastClassBySpringCGLIB$$51d359cb.invoke(<generated>)
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:721)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:282)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:656)
    at com.wmosIIBL.service.ItemIBLService$$EnhancerBySpringCGLIB$$eecd7652.getItemIBLByDspLocn(<generated>)
    at com.wmosIIBL.controller.ItemIBLController.getItemInvnByLocn(ItemIBLController.java:30)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:180)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:440)
    at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:494)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:1025)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1136)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)
org.hibernate.QueryParameterException:找不到命名参数[SDPLOCN]
位于org.hibernate.engine.query.spi.ParameterMetadata.getNamedParameterDescriptor(ParameterMetadata.java:148)
位于org.hibernate.engine.query.spi.ParameterMetadata.getNamedParameterExpectedType(ParameterMetadata.java:165)
位于org.hibernate.internal.AbstractQueryImpl.determineType(AbstractQueryImpl.java:523)
位于org.hibernate.internal.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:493)
在com.wmosibl.dao.itembldaoimpl.getIBLByDspLocn上(itembldaoimpl.java:22)
在com.wmosibl.service.itemblservice.getitembybydsplocn(itemblservice.java:22)上
在com.wmosibl.service.ItemIBLService$$FastClassBySpringCGLIB$$51d359cb.invoke()上
位于org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
位于org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:721)
在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:157)上
位于org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99)
位于org.springframework.transaction.interceptor.TransactionSpectSupport.invokeWithinTransaction(TransactionSpectSupport.java:282)
位于org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96)
在org.springframework.aop.framework.ReflectiveMethodInvocation.procedue(ReflectiveMethodInvocation.java:179)上
位于org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:656)
在com.wmosibl.service.itemblservice$$EnhancerBySpringCGLIB$$eecd7652.getitembybydsplocn()上
在com.wmosibl.controller.ItemIBLController.getItemInvnByLocn(ItemIBLController.java:30)上
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源)
在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源)
位于java.lang.reflect.Method.invoke(未知源)
位于org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:180)
位于org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:440)
位于org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:428)
位于org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
位于org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
位于org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
位于org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
位于org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
位于org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
位于org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
位于org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
位于org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:494)
位于org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
位于org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
位于org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:1025)
位于org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
位于org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
位于org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1136)
位于org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
位于org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(未知源)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(未知源)
位于org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
位于java.lang.Thread.run(未知源)

我想我在使用中遗漏了一些东西。请告诉我为什么即使我在服务层使用@service和@Transactional,在Dao层使用@Repository,我也无法在spring服务类中捕获hibernate引发的异常。

org.hibernate.QueryParameterException
不是
DataAccessException
(你正试图抓住的那个)正如你在它身上看到的。 如果您想捕获此异常,应该将其添加到catch块中。它是
运行时异常
,因此如果您像这样省略它,编译器不会说任何话

试试这个:

try {
    itemIBLDaoImpl.getIBLByDspLocn(dspLocn);
} catch (DataAccessException | QueryParameterException exception) {
    System.out.println(exception.getMessage());
}
你正在捕获数据访问
try {
    itemIBLDaoImpl.getIBLByDspLocn(dspLocn);
} catch (DataAccessException | QueryParameterException exception) {
    System.out.println(exception.getMessage());
}