2013-02-11 70 views
7

我想用Java来配置JPA。什么是jpa:repositories标签的Java配置版本?

我知道@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

请在您的问题中发布例外。 – 2013-02-11 19:31:40

回答

6

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

您有解决这个问题(选择你最喜欢的一个)两个选项:

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

选项3.在注释中设置entityManagerFactoryRef属性。自问题得到解答以来,这可能是新的。 – 2018-01-29 19:14:58