【问题标题】:@Autowired entityManagerFactory is null@Autowired entityManagerFactory 为空
【发布时间】:2023-03-07 17:05:01
【问题描述】:

我的应用无法自动装配 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 为空?

【问题讨论】:

  • 如何获得 Engine 实例?
  • 可能是因为@Qualifier("entityManagerFactory")。您尚未在 xml 配置中限定 emf
  • @orid 它通过id 属性。
  • 你在Engine中添加了@Component并在config中添加了component-scan吗?
  • 我通过以下方式获取引擎实例:Engine engine = new Engine();

标签: spring hibernate


【解决方案1】:

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

还要确保您希望将EntityManagerFactory 注入的类(Engine 类)是弹簧管理的 bean。 Spring 只会将引用注入到 Spring 托管的 bean 中。

【讨论】:

  • 我已经 ,但是它不起作用
  • 您的 Engine 类是 Spring 托管 bean 吗?还是您自己构建实例? Spring 只会将依赖项注入它知道和管理的 bean。
  • 你说得对!我在春天就知道我创建一个引擎作为 POJO 的事实。请将此添加到您的答案中,我会接受它
  • 将其添加到答案中。
【解决方案2】:

你试过这个吗?

private EntityManagerFactory entityManagerFactory;

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

前段时间我遇到了同样的错误,我找到了解决方案。

【讨论】:

  • 它对我不起作用。相同的结果 - entityManagerFactory 为空
【解决方案3】:

如果您使用 new Engine() 创建您的 Engine(如您的一个 cmets 中所述),则它不是由 Spring 管理的。 @Component 那时没有效果,并且不会注入依赖项。你需要注入你的引擎。

【讨论】:

    猜你喜欢
    • 2016-02-28
    • 2019-08-10
    • 1970-01-01
    • 2017-11-29
    • 2014-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多