Java Spring中HTTP会话范围的EntityManagerFactory

Java Spring中HTTP会话范围的EntityManagerFactory,java,spring,hibernate,spring-mvc,hibernate-entitymanager,Java,Spring,Hibernate,Spring Mvc,Hibernate Entitymanager,在Spring4中,我需要为每个HTTP会话使用单独的EntityManagerFactory。这是因为使用DB登录密码进行身份验证。 因此,我将会话范围限定为DataSource和EntityManagerFactory,如下所示: @Bean @Scope(value = "session", proxyMode = ScopedProxyMode.INTERFACES) public FactoryBean<EntityManagerFactory> entityManager

在Spring4中,我需要为每个HTTP会话使用单独的
EntityManagerFactory
。这是因为使用DB登录密码进行身份验证。 因此,我将会话范围限定为
DataSource
EntityManagerFactory
,如下所示:

@Bean
@Scope(value = "session", proxyMode = ScopedProxyMode.INTERFACES)
public FactoryBean<EntityManagerFactory> entityManagerFactory() throws SQLException {
    LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();        
    factoryBean.setDataSource(dataSource());
    factoryBean.setPersistenceProviderClass(HibernatePersistence.class);
    factoryBean.setPersistenceUnitName("db");
    return factoryBean;
}
但我有一个错误:

NoUniqueBeanDefinitionException: No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined: expected single matching bean but found 2: scopedTarget.entityManagerFactory,entityManagerFactory
如何正确地注入它?

您不需要(或不想要)会话范围
EntityManagerFactory


使用支持为执行线程设置凭据的
数据源
,如,或使用内置到hibernate中的。

不,您不需要会话范围的对象。使用并设置每个请求的凭据。不要尝试使用会话或其他作用域实体管理器。或者使用hibernate的内置多租户支持,它也支持这种开箱即用的方式!哇!你能写下来作为回答吗?那我就接受了。
NoUniqueBeanDefinitionException: No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined: expected single matching bean but found 2: scopedTarget.entityManagerFactory,entityManagerFactory