7

我正在尝试仅使用 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;
}
4

1 回答 1

7

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

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

  1. 将配置LocalContainerEntityManagerFactoryBean的方法名称从entityManagerFactoryBean()更改为entityManagerFactory()。这将创建一个名为entityManagerFactory的 bean 。
  2. @Bean注解的名称属性设置为“entityManagerFactory”。换句话说,使用@Bean(name="entityManagerFactory")注解对配置方法进行注解。这样你就可以自己指定bean的名字,并确保被注解的方法的名字被忽略。
于 2013-02-12T06:56:46.677 回答