【问题标题】:What's the Java configuration version of jpa:repositories tag?jpa:repositories 标签的 Java 配置版本是什么?
【发布时间】:2013-02-11 18:49:48
【问题描述】:

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

【问题讨论】:

  • 请在您的问题中也发布例外情况。

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


【解决方案1】:

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

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

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

【讨论】:

  • 选项 3. 在注解上设置 entityManagerFactoryRef 属性。这可能是新问题,因为问题已得到解答。
猜你喜欢
  • 2018-03-28
  • 2019-02-15
  • 2011-04-27
  • 1970-01-01
  • 1970-01-01
  • 2017-01-19
  • 2018-08-10
  • 1970-01-01
  • 2014-01-28
相关资源
最近更新 更多