我需要在Spring 4中为每个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;
}
然后我尝试将其注入单身:
@PersistenceContext
private EntityManager entityManager;
但是我收到了一个错误:
NoUniqueBeanDefinitionException: No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined: expected single matching bean but found 2: scopedTarget.entityManagerFactory,entityManagerFactory
可以做些什么来正确注射?
答案 0 :(得分:1)
您不需要(或想要)一个范围EntityManagerFactory
的会话。
使用支持为执行线程设置凭据的DataSource
,例如UserCredentialsDataSourceAdapter
或使用构建到hibernate中的multi tenancy support。