Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java NoSuchBeanDefinitionException-未定义名为blPU的bean-无法注入EntityManager JPA_Java_Spring_Jpa - Fatal编程技术网

Java NoSuchBeanDefinitionException-未定义名为blPU的bean-无法注入EntityManager JPA

Java NoSuchBeanDefinitionException-未定义名为blPU的bean-无法注入EntityManager JPA,java,spring,jpa,Java,Spring,Jpa,我有一门课看起来像这样 @Repository("myService") @Transactional public class MyDaoImpl implements MyDao { @PersistenceContext(unitName="blPU") protected EntityManager em; @Resource(name="blEntityConfiguration") protected EntityConfiguration entityConfiguration;

我有一门课看起来像这样

@Repository("myService")
@Transactional
public class MyDaoImpl implements MyDao
{
@PersistenceContext(unitName="blPU")
protected EntityManager em;

@Resource(name="blEntityConfiguration")
protected EntityConfiguration entityConfiguration;

    @Override
    @Transactional
    public Person findPersonByUsername(String username)
    {       
        System.out.println("The entity manager is "+em);
                // ....
    }

}
以及
persistence.xml
,它位于
src/main/resources/META-INF/persistence.xml

<persistence-unit name="blPU" transaction-type="RESOURCE_LOCAL">
    <non-jta-data-source>jdbc/web</non-jta-data-source>
    <class>com.mycompany.dao.MyDaoImpl</class>
    <exclude-unlisted-classes/>
<properties>
  <property name="hibernate.hbm2ddl.auto" value="update" />
  <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
  <property name="hibernate.show_sql" value="true"/>
  <property name="hibernate.cache.use_second_level_cache" value="true"/>
  <property name="hibernate.cache.use_query_cache" value="true"/>
  <property name="hibernate.hbm2ddl.import_files" value="/sql/import_storage.sql"/>
</properties>
</persistence-unit>
jta数据源声明如下

 <Resource name="jdbc/web"
              auth="Container"
              type="javax.sql.DataSource"
              factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
              testWhileIdle="true"
              testOnBorrow="true"
              testOnReturn="false"
              validationQuery="SELECT 1"
              timeBetweenEvictionRunsMillis="30000"
              maxActive="15"
              maxIdle="10"
              minIdle="5"
              removeAbandonedTimeout="60"
              removeAbandoned="false"
              logAbandoned="true"
              minEvictableIdleTimeMillis="30000"
              jdbcInterceptors="org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer"
              username="${database.user}"
              password="${database.password}"
              driverClassName="${database.driver}"
              url="${database.url}"/>

将以下内容添加到
applicationContext.xml
解决了问题

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
<context:annotation-config/>


感谢@geoand

的有用评论,您能否发布您的spring配置,尤其是创建实体管理器工厂的部分?实体管理器工厂是容器管理的。它使用JNDIT数据源由容器管理,而不是实体管理器工厂。您的Spring配置中没有类型为
LocalEntityManagerFactoryBean
的bean吗?如果没有,那就是问题所在谢谢。不,spring配置中没有这样的bean。但是对于我的框架中的一些预定义类,实体管理器是被注入的。这些类实际上是放在lib文件夹中的jar。它是如何为他们而不是我的自定义类注入的?我真的没有答案:(
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
<context:annotation-config/>