1

SpringJavaConfigを使用してSpringアプリケーションをxmlフリーにしようとしています。

今、私はウェブページを要求する次のエラーに直面しています:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [javax.persistence.EntityManagerFactory] is defined: expected single bean but found 0
    at org.springframework.beans.factory.BeanFactoryUtils.beanOfType(BeanFactoryUtils.java:394)
    at org.springframework.orm.jpa.EntityManagerFactoryUtils.findEntityManagerFactory(EntityManagerFactoryUtils.java:111)
    at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.lookupEntityManagerFactory(OpenEntityManagerInViewFilter.java:229)
    at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.lookupEntityManagerFactory(OpenEntityManagerInViewFilter.java:205)
    at org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:152)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)

私の永続性-構成:

@Configuration
@EnableTransactionManagement
public class PersistenceConfig implements TransactionManagementConfigurer
{

  @Bean(name = "dataSource")
  public DataSource dataSource()
  {
    try
    {
      return (DataSource) new JndiTemplate().lookup("java:comp/env/jdbc/my-db");
    }
    catch (NamingException e)
    {
      throw new ApplicationConfigurationException("db-context not found", e);
    }
  }

  @Bean(name = "entityManagerFactory")
  public EntityManagerFactory entityManagerFactory()
  {
    LocalContainerEntityManagerFactoryBean lcemfb = new LocalContainerEntityManagerFactoryBean();
    lcemfb.setDataSource(dataSource());
    lcemfb.setJpaDialect(new HibernateJpaDialect());
    lcemfb.setJpaVendorAdapter(jpaVendorAdapter());
    lcemfb.setPersistenceUnitName("persistenceUnit");
    lcemfb.setPersistenceXmlLocation("classpath:META-INF/persistence.xml");
    lcemfb.afterPropertiesSet();
    return lcemfb.getObject();
  }

  @Bean(name = "jpaVendorAdapter")
  public JpaVendorAdapter jpaVendorAdapter()
  {
    HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();
    jpaVendorAdapter.setShowSql(true);
    jpaVendorAdapter.setDatabase(Database.ORACLE);
    jpaVendorAdapter.setDatabasePlatform(Oracle10gDialect.class.getName());
    jpaVendorAdapter.setGenerateDdl(false);
    return jpaVendorAdapter;
  }

  /**
   * @see org.springframework.transaction.annotation.TransactionManagementConfigurer#annotationDrivenTransactionManager()
   */
  @Bean(name = "transactionManager")
  public PlatformTransactionManager annotationDrivenTransactionManager()
  {
    JpaTransactionManager jpaTransactionManager = new JpaTransactionManager();
    jpaTransactionManager.setEntityManagerFactory(entityManagerFactory());
    return jpaTransactionManager;
  }
}

データベース-アプリケーション内のアクセスはこれまでのところ正常に機能しています。

ヒントはありますか?

4

1 に答える 1

1

コンテナを登録するか、スキャンを実行する必要がある場合があります。こちらをご覧ください(クリックしてください)

于 2012-12-27T23:26:16.190 に答える