2

私のアプリは 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はnullですか?

4

3 に答える 3

4

Spring が注釈を使用して自動書き込みを行うには、Spring にそれを伝える必要があります。xml 構成で (要素がまだないと仮定してcontext:component-scan) を追加しcontext:annotation-configます。これにより、 Springアプリケーション コンテキストに注釈 ( 、 など) をスキャンしてオートワイヤリングを行うように指示し@Autowiredます。@Inject@Resource

また、EntityManagerFactory注入するクラス (Engineクラス) が Spring Managed Bean であることを確認してください。Spring は、Spring マネージド Bean にのみ参照を挿入します。

于 2013-08-24T08:09:16.627 に答える
2

これで試しましたか?

private EntityManagerFactory entityManagerFactory;

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

しばらく前に同じエラーが発生しましたが、これが解決策であることがわかりました。

于 2013-08-23T21:08:17.207 に答える
0

(コメントEnginenew Engine()1つに記載されているように)で作成すると、Springによって管理されません。@Componentその場合は効果がなく、依存関係は注入されません。エンジンを注入する必要があります。

于 2013-08-24T09:37:33.110 に答える