2016-06-29 26 views
0

Ich versuche, ein Problem mit zwei Datenquellen zu lösen. Ich las viele Text im Internet und machte einfache Lösung basierend aufKeine qualifizierende Bean des Typs [javax.persistence.EntityManagerFactory] definiert: erwartete einzelne übereinstimmende Bean, aber gefunden 2

Ich habe zwei „config Klassen“ gemacht, wie folgt aus:

@Configuration 
@EnableTransactionManagement 
@EnableJpaRepositories(
     entityManagerFactoryRef = "ResultEntityManagerFactory", 
     transactionManagerRef = "ResultEntityTransactionManager", 
     basePackages = "com.migr.result.repositories" 
     ) 
public class ResultTablesConfig { 
    @Autowired 
    @Qualifier("orclAdapter") 
    JpaVendorAdapter jpaVendorAdapter; 

    @Bean(name="ResultEntityDataSource") 
    @ConfigurationProperties(prefix = "datasource.migr.result") 
    public DataSource declReaconDS() { 
     return new DataSource(); 
    } 

    @Bean(name = "ResultEntityManager") 
    public EntityManager entityManager() { 
     return entityManagerFactory().createEntityManager(); 
    } 

    @Bean(name = "ResultEntityManagerFactory") 
    public EntityManagerFactory entityManagerFactory() { 
     LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean(); 
     lef.setDataSource(declReaconDS()); 
     lef.setJpaVendorAdapter(jpaVendorAdapter); 
     lef.setPackagesToScan("com.migr.result.tables.*"); 
     lef.setPersistenceUnitName("ResultEntityPersistenceUnit"); 
     lef.afterPropertiesSet(); 
     return lef.getObject(); 
    } 

    @Bean(name = "ResultEntityTransactionManager") 
    public PlatformTransactionManager transactionManager() { 
     return new JpaTransactionManager(entityManagerFactory()); 
    } 
} 

und eine andere, praktisch gleich - SourceTablesConfig. einzige Unterschied ist, @Bean Namen (sie beginnen alle mit "Source") und Repositorys Mapping, wie folgt aus:

@Configuration 
@EnableTransactionManagement 
@EnableJpaRepositories(
     entityManagerFactoryRef = "SourceEntityManagerFactory", 
     transactionManagerRef = "SourceEntityTransactionManager", 
       basePackages = "com.migr.source.repositories" 
      ) 

public class SourceTablesConfig { 
............... 
@Bean(name = "SourceEntityManagerFactory") 
public EntityManagerFactory entityManagerFactory(){ 
    LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean(); 
    lef.setDataSource(declReaconDS()); 
    lef.setJpaVendorAdapter(jpaVendorAdapter); 
    lef.setPackagesToScan("com.migr.source.tables.*"); 
    lef.setPersistenceUnitName("SourceEntityPersistenceUnit"); 
    lef.afterPropertiesSet(); 
    return lef.getObject(); 
} 

Meine Leistungen simle sind:

@Service 
public class CatalogsSourceService { 
@Autowired 
CatalogsSourceRepository catalogsrepository; 
....... 
} 

wo CatalogsSourceRepository extends JpaRepository<Catalogs, Long>

Mein „Haupt "Klasse:

@RestController 
@RequestMapping("/") 
public class Main { 

@Autowired 
CatalogsSourceService source_serv; 

@Autowired 
CatalogsResultService result_serv; 
@RequestMapping 
public Object index() { 
    Map<String,List> results = new HashMap<>(); 
    results.put("First", source_serv.findAll()); 
    results.put("Second", source_serv.findAll()); 
    return results; 
} 

es w orked perfekt, wenn ich nur eine DataSource hatte, , aber jetzt wird es mit Fehler beendet: expected single matching bean but found 2: SourceEntityManagerFactory,ResultEntityManagerFactory

Ich verstehe nicht, warum es passiert. Meine Lösung sieht praktisch so aus, wie in obigem Link erwähnt, aber er bekommt keinen solchen Fehler.

werde ich für jede Hilfe

PS sehr dankbar sein. vergaß meine "AppConfig":

@Configuration 
@ComponentScan(basePackages = { "com.migr" }) 
public class AppConfig { 
    @Bean(name="orclAdapter") 
    public JpaVendorAdapter jpaVendorAdapter() { 
     HibernateJpaVendorAdapter jpaVendorAdapter = new  HibernateJpaVendorAdapter(); 
     jpaVendorAdapter.setShowSql(true); 
     jpaVendorAdapter.setDatabase(Database.ORACLE);   
     return jpaVendorAdapter; 
    } 

    @Bean 
    public HibernateExceptionTranslator hibernateExceptionTranslator() { 
     return new HibernateExceptionTranslator(); 
    } 
} 

Antwort

0

Sorry Leute, mein Problem ist gelöst. Ich habe die einfachste Lösung verpasst. Ich musste nur eine EntityManagerFactory Bean mit @Primary Annotation annotieren.

@Bean(name = "SourceEntityManagerFactory") 
@Primary 
public EntityManagerFactory entityManagerFactory() { 
........... 
} 

offensichtliche Lösungen sind nicht immer so offensichtlich ...