我有一个 Spring Boot 应用程序。它创建 LocalSessionFactoryBean 对象并注入(inject) session 工厂变量。它工作正常,如下所示:
@Autowired
@Qualifier(value="sessionFactory")
private SessionFactory sessionFactory;
@Primary
@Bean
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean factory = new LocalSessionFactoryBean();
factory.setDataSource(dataSource);
factory.setPackagesToScan(
new String[] {
"com.abc..entities",
"com.abc.xyz.entities",
"
});
factory.setHibernateProperties(hibernateProperties());
return factory;
}
但是,我需要将sessionFactory的bean名称(默认为函数名称)从sessionFactory更改为entityManagerFactory,因此我执行了以下操作:
@Autowired
@Qualifier(value="entityManagerFactory")
private SessionFactory sessionFactory;
@Primary
@Bean(name="entityManagerFactory")
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean factory = new LocalSessionFactoryBean();
factory.setDataSource(dataSource);
factory.setPackagesToScan(
new String[] {
"com.abc..entities",
"com.abc.xyz.entities",
"
});
factory.setHibernateProperties(hibernateProperties());
return factory;
}
但它抛出错误:
> Error creating bean with name 'XYZ': Unsatisfied dependency expressed
> through field 'sessionFactory'; nested exception is
> org.springframework.beans.factory.NoSuchBeanDefinitionException: No
> qualifying bean of type 'org.hibernate.SessionFactory' available:
> expected at least 1 bean which qualifies as autowire candidate.
> Dependency annotations:
> {@org.springframework.beans.factory.annotation.Autowired(required=true),
> @org.springframework.beans.factory.annotation.Qualifier(value=entityManagerFactory)}
我相信我做对了,我在这里错过了什么?
更新:-
我按照答案之一尝试了以下操作,但没有成功:
@Autowired
@Qualifier(value = "entityManagerFactory")
private SessionFactory sessionFactory;
并将方法更改为
@Primary
@Bean
public LocalSessionFactoryBean entityManagerFactory()
{ ..........},
> Unsatisfied dependency expressed through field 'sessionFactory';
> nested exception is
> org.springframework.beans.factory.NoSuchBeanDefinitionException: No
> qualifying bean of type 'org.hibernate.SessionFactory' available:
> expected at least 1 bean which qualifies as autowire candidate.
> Dependency annotations:
> {@org.springframework.beans.factory.annotation.Autowired(required=true),
> @org.springframework.beans.factory.annotation.Qualifier(value=entityManagerFactory)}
最佳答案
我认为这里发生的情况是,entityManagerFactory 会自动从 spring 注册到另一个 bean。因此你没有得到你所要求的。
尝试稍微更改一下名称
@Bean(name="customEntityManagerFactory")
public LocalSessionFactoryBean sessionFactory() {
然后
@Autowired
@Qualifier("customEntityManagerFactory")
private SessionFactory sessionFactory;
关于java - Spring @Bean Name,不适用于@Qualifier,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66814195/