什么是jpa的Java配置版本:repositories标签?

时间:2013-02-11 18:49:49

标签: spring spring-data spring-data-jpa

我尝试使用Java配置JPA。

我认为@EnableJpaRepositories相当于xml中的jpa:repositories标签,但我想情况并非如此?

我的xml中有这个:

<jpa:repositories base-package="com.myapp.bla.bla" />

但如果我删除它而改为使用

@EnableJpaRepositories("com.myapp.bla.bla")

在我的java配置中,我得到一个异常 - 我认为从1.2.0开始就可以用Java配置JPA?

编辑:

根异常是:

No bean named 'entityManagerFactory' is defined

我认为异常与我的配置中的这个定义有关,但如上所述,如果我保留xml并将其导入我的java配置,一切都有效。

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() throws ClassNotFoundException {
    LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();

    factoryBean.setDataSource(dataSource());
    factoryBean.setPackagesToScan(new String[] { "com.myapp.bla.bla.model" });
    factoryBean.setPersistenceProviderClass(HibernatePersistence.class);
    Properties props = new Properties();
    props.put("hibernate.dialect", "org.hibernate.dialect.MySQL5InnoDBDialect");
    factoryBean.setJpaProperties(props);

    return factoryBean;
}

1 个答案:

答案 0 :(得分:6)

问题是您当前的配置会创建一个名为 entityManagerFactoryBean 的bean。但是,根异常的错误消息表明找不到名为 entityManagerFactory 的bean。

您有两种方法可以解决此问题(选择您最喜欢的问题):

  1. LocalContainerEntityManagerFactoryBean 的方法名称从 entityManagerFactoryBean()更改为 entityManagerFactory()。这将创建一个名为 entityManagerFactory
  2. 的bean
  3. @Bean 注释的name属性设置为“entityManagerFactory”。换句话说,使用 @Bean(name =“entityManagerFactory”)注释来注释配置方法。这样,您可以自己指定bean的名称,并确保忽略带注释的方法的名称。