java – 在OpenSessionInViewFilter之后没有定义名为’sessionFactory’的bean

前端之家收集整理的这篇文章主要介绍了java – 在OpenSessionInViewFilter之后没有定义名为’sessionFactory’的bean前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
好吧,因为LazyInitializationException我需要在我的web.xml中添加“OpenSessionViewInFilter”,使用以下代码
  1. <!-- openSessionInViewfilter -->
  2. <filter>
  3. <filter-name>openSessionInViewFilter</filter-name>
  4. <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
  5. </filter>
  6.  
  7. <filter-mapping>
  8. <filter-name>openSessionInViewFilter</filter-name>
  9. <url-pattern>/*</url-pattern>
  10. </filter-mapping>

问题是在我添加代码后,当我尝试启动TOMCAT 7时出现以下错误

  1. org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'sessionFactory' is defined
  2. at org.springframework.beans.factory.support.DefaultListablebeanfactory.getBeanDefinition(DefaultListablebeanfactory.java:529)
  3. at org.springframework.beans.factory.support.Abstractbeanfactory.getMergedLocalBeanDefinition(Abstractbeanfactory.java:1094)
  4. at org.springframework.beans.factory.support.Abstractbeanfactory.doGetBean(Abstractbeanfactory.java:276)
  5. at org.springframework.beans.factory.support.Abstractbeanfactory.getBean(Abstractbeanfactory.java:196)
  6. at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1079)
  7. at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.lookupSessionFactory(OpenSessionInViewFilter.java:242)
  8. at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.lookupSessionFactory(OpenSessionInViewFilter.java:227)
  9. at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:171)
  10. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
  11. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
  12. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
  13. at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
  14. at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
  15. at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
  16. at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
  17. at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
  18. at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
  19. at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
  20. at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
  21. at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
  22. at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
  23. at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
  24. at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
  25. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
  26. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
  27. at java.lang.Thread.run(Thread.java:724)

我不知道为什么会出现这种错误,因为我使用的是Entitymanager(JPA)而不是SessionFactory,请参阅我的applicationContext.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
  4. xmlns:tx="http://www.springframework.org/schema/tx"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
  7. http://www.springframework.org/schema/context
  8. http://www.springframework.org/schema/context/spring-context-3.0.xsd
  9. http://www.springframework.org/schema/tx
  10. http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
  11.  
  12. <!-- Seta anotaçoes para serem usadas pelo Spring -->
  13. <context:annotation-config />
  14.  
  15. <!-- Define o pacote onde o Spring vai procurar por beans anotados -->
  16. <context:component-scan
  17. base-package="br.com.sender" />
  18.  
  19. <!-- define que as transaçoes irao ser anotadas -->
  20. <tx:annotation-driven proxy-target-class="true" />
  21.  
  22. <!-- Configuracao do Banco de Dados -->
  23. <bean id="dataSource"
  24. class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  25. <property name="driverClassName" value="org.postgresql.Driver" />
  26. <property name="url" value="jdbc:postgresql://localhost/sender" />
  27. <property name="username" value="postgres" />
  28. <property name="password" value="pgadmin" />
  29. </bean>
  30.  
  31. <!-- Configuracao do Hibernate -->
  32. <bean id="entityManagerFactory"
  33. class="org.springframework.orm.jpa.LocalContainerEntityManagerfactorybean">
  34. <property name="persistenceUnitName" value="senderPU" />
  35. <property name="dataSource" ref="dataSource" />
  36. <property name="jpaVendorAdapter">
  37. <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
  38. <property name="databasePlatform" value="org.hibernate.dialect.PostgresqlDialect" />
  39. <property name="showsql" value="true" />
  40. </bean>
  41. </property>
  42. </bean>
  43.  
  44. <!-- Configuracao do gerente de transacoes do Spring -->
  45. <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
  46. <property name="entityManagerFactory" ref="entityManagerFactory" />
  47. </bean>
  48.  
  49. </beans>

解决方法

您需要在下面添加两个代码
  1. <filter>
  2. <filter-name>OpenEntityManagerInViewFilter</filter-name>
  3. <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
  4. </filter>

  1. <filter-mapping>
  2. <filter-name>OpenEntityManagerInViewFilter</filter-name>
  3. <url-pattern>/*</url-pattern>
  4. </filter-mapping>

然后你需要在你的类路径中添加spring-orm- {我们的版本} .jar.如果你使用maven就像这样

  1. <dependency>
  2. <groupId>org.springframework</groupId>
  3. <artifactId>spring-orm</artifactId>
  4. <version>${spring.ver}</version>
  5. </dependency>

– 编辑 –

对不起,我正在使用JPA,你的代码建议你使用hibernate3,所以你的filter-class应该是org.springframework.orm.hibernate3.support.OpenSessionInViewFilter

猜你在找的Java相关文章