@Autowired entityManagerFactory为null

时间:2013-08-23 21:02:59

标签: spring hibernate

我的应用无法自动装配entityManagerFactory。

我的 applicationContext.xml

<tx:annotation-driven/>
<context:component-scan base-package="top.level.package" />

<bean id="persistenceUnitManager"     
    class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
    <property name="persistenceXmlLocation">
        <value>classpath:jpa-persistence.xml</value>
    </property>
</bean>

<bean id="entityManagerFactory"      
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="persistenceUnitManager" ref="persistenceUnitManager" />
</bean>

<bean id="transactionManager" 
    class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

我的 java类

@Component
public class Engine {

    @Autowired
    @Qualifier("entityManagerFactory")
    private EntityManagerFactory entityManagerFactory;
......
}

问题:

为什么entityManagerFactory为空?

3 个答案:

答案 0 :(得分:4)

对于弹簧使用注释进行自动装配,你必须告诉春天。在您的xml配置中(假设您还没有context:component-scan元素)添加context:annotation-config。这将指示spring应用程序上下文扫描注释(如@Autowired@Inject@Resource等)以进行自动装配。

还要确保要将EntityManagerFactory注入的类(Engine类)是一个Spring托管bean。 Spring只会向spring managed beans注入引用。

答案 1 :(得分:2)

你试过这个吗?

private EntityManagerFactory entityManagerFactory;

@Autowired
@PersistenceUnit(unitName = "myUnitName")
public void setEntityManagerFactory(EntityManagerFactory entityManagerFactory) {
    this.entityManagerFactory = entityManagerFactory;
}

我前段时间遇到了同样的错误,我发现这是一个解决方案。

答案 2 :(得分:0)

如果您使用Enginenew Engine()(如您的一条评论中所述)使@Component变形,则不会由Spring管理。 {{1}}没有效果,依赖关系不会被注入。你需要注射引擎。