简体   繁体   English

找不到Spring OpenSessionInViewFilter和sessionFactory bean

[英]Spring OpenSessionInViewFilter and sessionFactory bean not found

I'm trying to add a OpenSessionInViewFilter in my Spring MVC application because accessing a collections in my Thymeleaf templates resulted in a LazyInitializationException. 我正在尝试在Spring MVC应用程序中添加OpenSessionInViewFilter,因为访问Thymeleaf模板中的集合会导致LazyInitializationException。 This is what I have: 这就是我所拥有的:

public class ApplicationInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
        rootContext.register(ApplicationContext.class);
        rootContext.setDisplayName("Test");

        servletContext.addListener(new ContextLoaderListener(rootContext));

        ServletRegistration.Dynamic dispatcher =
                servletContext.addServlet("dispatcher", new DispatcherServlet(rootContext));
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/");

        FilterRegistration.Dynamic filter = servletContext.addFilter("openSessionInViewFilter", OpenSessionInViewFilter.class);
        filter.setInitParameter("singleSession", "true");
        filter.addMappingForServletNames(null, true, "dispatcher");

    }

}

And: 和:

@Configuration
@EnableWebMvc
@ComponentScan
@Import({ SecurityConfig.class })
@PropertySource("classpath:application.properties")
@EnableJpaRepositories("test.model")
public class ApplicationContext extends WebMvcConfigurerAdapter {

    @Autowired
    public StringToCompany stringToCompany;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/css/**").addResourceLocations("/resources/css/**");
        registry.addResourceHandler("/js/**").addResourceLocations("/resources/js/**");
        registry.addResourceHandler("/images/**").addResourceLocations("/resources/images/**");
    }

    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(stringToCompany);
    }

    @Bean
    public SessionBean sessionBean() {
        return new SessionBean();
    }

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource datasource = new DriverManagerDataSource();
        ...
        return datasource;
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(){
        LocalContainerEntityManagerFactoryBean factoryBean
                = new LocalContainerEntityManagerFactoryBean();
        factoryBean.setDataSource( dataSource() );
        factoryBean.setPackagesToScan( new String[ ] { "test.model" } );
        JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        factoryBean.setJpaVendorAdapter( vendorAdapter );
        factoryBean.setJpaProperties( this.additionalProperties() );
        return factoryBean;
    }

    @Bean
    public PlatformTransactionManager transactionManager(){
        JpaTransactionManager transactionManager = new JpaTransactionManager();
        transactionManager.setEntityManagerFactory(
                this.entityManagerFactory().getObject() );
        return transactionManager;
    }

    @Bean
    public PersistenceExceptionTranslationPostProcessor exceptionTranslation(){
        return new PersistenceExceptionTranslationPostProcessor();
    }

    Properties additionalProperties() {
        Properties properties = new Properties();
        ...
        return properties;
    }

}

This results in 这导致了

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'sessionFactory' is defined

I was hoping it would be as sample as adding this: 我希望它像添加这样的样本一样:

@Bean
public AnnotationSessionFactoryBean sessionFactory() {
    return new AnnotationSessionFactoryBean();
}

but that causes a while bunch of 但这导致了一堆

java.lang.NoClassDefFoundError: Lorg/hibernate/cache/CacheProvider;

I finally tried changing AnnotationSessionFactoryBean to LocalSessionFactoryBean (Hibernate 4) but that gave me 我终于尝试将AnnotationSessionFactoryBean更改为LocalSessionFactoryBean(Hibernate 4),但这给了我

Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set

Can anyone help me integrate OpenSessionInViewFilter into my current setup? 任何人都可以帮我将OpenSessionInViewFilter集成到我当前的设置中吗? I'm trying not to use xml. 我试图不使用xml。

Add OpenEntityManagerInViewFilter in Spring 4 在Spring 4中添加OpenEntityManagerInViewFilter

public class WebContextInitializer implements WebApplicationInitializer{

@Override
public void onStartup(ServletContext servletContext) throws ServletException
{
    AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
    rootContext.register(Application.class);
    rootContext.setServletContext(servletContext);
    ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(rootContext));
    dispatcher.setLoadOnStartup(1);
    dispatcher.addMapping("/");

    FilterRegistration.Dynamic filter = servletContext.addFilter("openEntityManagerInViewFilter", OpenEntityManagerInViewFilter.class);
    filter.setInitParameter("singleSession", "true");
    filter.addMappingForServletNames(null, true, "dispatcher");

    /**
     * Add Spring ContextLoaderListener
     */
    servletContext.addListener(new ContextLoaderListener(rootContext));
}}

Or add OpenEntityManagerInViewFilter in Spring 4 in the web.xml: 或者在web.xml中的Spring 4中添加OpenEntityManagerInViewFilter:

<filter>
    <filter-name>openEntityManagerInViewFilter</filter-name>
    <filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
    <init-param>
        <param-name>singleSession</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>openEntityManagerInViewFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在OpenSessionInViewFilter之后没有定义名为&#39;sessionFactory&#39;的bean - No bean named 'sessionFactory' is defined after OpenSessionInViewFilter 无法在春季自动装配sessionfactory bean - unable to autowire sessionfactory bean in spring 春季错误:没有找到依赖项类型为[org.hibernate.SessionFactory]的合格bean - Spring error: No qualifying bean of type [org.hibernate.SessionFactory] found for dependency 春天启动。无法找到“org.hibernate.SessionFactory”类型的bean - Spring-boot. A bean of type 'org.hibernate.SessionFactory' that could not be found Spring MVC:未找到依赖项类型为[org.hibernate.SessionFactory]的合格Bean - Spring MVC: No qualifying bean of type [org.hibernate.SessionFactory] found for dependency 无法“Autowired”,找不到“SessionFactory”类型的 bean - Could not `Autowired`, no bean of `SessionFactory` type found Spring 3.2 + Hibernate 4 OpenSessionInViewFilter - Spring 3.2 + Hibernate 4 OpenSessionInViewFilter 带有@Transactional注释的Spring OpenSessionInViewFilter - Spring OpenSessionInViewFilter with @Transactional annotation 找不到类型为“ org.hibernate.SessionFactory”的bean - A bean of type 'org.hibernate.SessionFactory' that could not be found NoSuchBeanDefinitionException:找不到依赖项类型为[org.hibernate.SessionFactory]的合格bean - NoSuchBeanDefinitionException: No qualifying bean of type [org.hibernate.SessionFactory] found for dependency
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM