2015-10-02 2 views
1

Spring JPA 4.2.1NoSuchBeanDefinitionException вызвано вложенной определения боб весна JPA

Уплотненный определение компонента выглядит, как показано ниже, но получает NoSuchBeanDefinitionException:

«Нет квалификационная рожкового типа [javax.persistence.EntityManagerFactory] не определен»

<bean id="tm" class="...JpaTransactionManager"> 
    <property name="entityManagerFactory"> 
     <bean class="...LocalContainerEntityManagerFactoryBean"> 
      <property name="dataSource"> 
       <bean class="...BasicDataSource" 
        p:driverClassName="..." p:url="..."> 
       </bean> 
      </property> 
     </bean> 
    </property> 
</bean> 

Работает только плоское определение, почему?

<bean id="tm" class="...JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="emf" /> 
</bean> 
<bean id="emf" class="...LocalContainerEntityManagerFactoryBean"> 
    <property name="dataSource" ref="ds" /> 
</bean> 
<bean id="ds" class="...BasicDataSource" 
    p:driverClassName="..." p:url="..."> 
</bean> 

ответ

1

Некоторые другие бобовые также требует EntityManagerFactory (какой именно, я не могу сказать - вы не показали полную трассировку стека). И inner beans являются анонимными, и их невозможно получить с помощью BeanFactory.getBean() или @Autowired, поэтому вы получите эту ошибку в первом случае.

Внутренние бобы всегда анонимным и они всегда созданы с внешним компонентом. Это не можно впрыскивать внутренние бобы в сопутствующие бобы, кроме как в охватывающий боб.

Во втором случае EntityManagerFactoryBean не является внутренней фасолью и может использоваться любым другим компонентом.

Смежные вопросы