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

wan*_*ist 7 spring spring-data spring-data-jpa

我正在尝试使用Java配置JPA.

我知道@EnableJpaRepositories相当于jml中的jpa:repositories标签,但我想情况并非如此?

我在我的xml中有这个:

<jpa:repositories base-package="com.myapp.bla.bla" />
Run Code Online (Sandbox Code Playgroud)

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

@EnableJpaRepositories("com.myapp.bla.bla")
Run Code Online (Sandbox Code Playgroud)

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

编辑:

根异常是:

No bean named 'entityManagerFactory' is defined
Run Code Online (Sandbox Code Playgroud)

我假设异常与我的配置中的这个定义有关,但如上所述,如果我保留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;
}
Run Code Online (Sandbox Code Playgroud)

pka*_*nen 7

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

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

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