2017-09-12 8 views
1

Spring Data JPAの使用方法を研究しています。どこが間違っているかを確認するのに役立ちます。複数の@EnableJpaRepositoriesクラスを定義するとjpaデータリポジトリに保存操作が実行されない

私は2つのJPAリポジトリを作成した:2つの異なるパッケージでAPIRepositoryClientRepositoryともそれぞれ@EnableJpaRepositories注釈を使用して、これらの2のリポジトリを設定するには、2つの設定クラスを作成しました。

Springアプリケーションがこれら2つのリポジトリのメソッドを同時に呼び出すと、APIRepository.save()は例外なく失敗します。 @Primiaryアノテーション(これはNoUniqueBeanDefinitionExceptionを避ける)をAPIAppConfigクラスに移動すると、例外なしでClientRepository.saveが失敗します。 SQLログを開いたが、失敗したメソッドに対してSQLの更新は実行されなかった。

誰もこのような状況に遭ったのですか? Spring Data Jpaの使い方は?

APIRepository

package test.api; 

public interface APIRepository extends Repository<API, Long>{ 
.... 
} 

APIAppConfig

package test.api; 

@Configuration 
@ComponentScan(basePackages = "test.api") 
@EnableJpaRepositories(
     basePackages = "test.api.repository", 
     entityManagerFactoryRef = "apiEntityManagerFactory", 
     transactionManagerRef="apiTransactionManager", 
     enableDefaultTransactions=true 
) 
@EnableTransactionManagement 
public class APIAppConfig { 
    @Bean 
    public LocalContainerEntityManagerFactoryBean apiEntityManagerFactory(){ 
    ... 
    } 

    @Bean 
    public PlatformTransactionManager apiTransactionManager() { 
    ... 
    } 

    @Bean 
    public DataSource apiDataSource() { 
    ... 
    } 
} 

APIService

package test.api; 

@Service 
public class APIService { 

    @Autowired 
    private APIRepository apiRepository; 


    public API findOne(Long id){ 
     return apiRepository.findOne(id); 
    } 

    @Transactional("apiTransactionManager") 
    public void updateOne(API api){ 
     apiRepository.save(api); 
    } 
} 
あなたが設定したあなたの APIAppConfigクラスで0

ClientRepository

package test.client; 

public interface ClientRepository extends Repository<Client, Long>{ 
    ... 
} 

ClientAppConfig

package test.client; 

@Configuration 
@ComponentScan(basePackages = "test.client") 
@EnableJpaRepositories(
     basePackages = "test.client", 
     entityManagerFactoryRef = "entityManagerFactory", 
     transactionManagerRef="transactionManager", 
     enableDefaultTransactions=true 
) 

@EnableTransactionManagement 
public class ClientAppConfig { 

    @Bean 
    @Primary 
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() { 
     ... 
    } 

    @Bean 
    public PlatformTransactionManager transactionManager() { 
    ... 
    } 

    @Bean 
    @Primary 
    public DataSource dataSource() { 
    ... 
    } 
} 

ClientService

package test.client; 

@Service 
public class ClientService { 

    @Autowired 
    private ClientRepository clientRepository; 


    public DaoTest findOne(Long id){ 
     return clientRepository.findOne(id); 
    } 

    @Transactional("transactionManager") 
    public void updateOne(Client client){ 
     clientRepository.save(client); 
    } 
} 
+0

内を移動?これはApplicationContextの作成時に発生するはずです。また、リポジトリやサービスを使用して終了する必要があります。この質問には何かがありません。 –

答えて

0

@EnableJpaRepositories(
    basePackages = "test.api.repository", 

しかし、あなたのAPIRepositoryは、私はあなたのAPIRepositoryクラスのソースコードに見ることができる、少なくともとして、パッケージtest.api.repositorytest.apiはないです。

だから、正しいものを反映するためにbasePackages値を変更するのいずれか、またはあなたのAPIRepositoryあなたは `NoUniqueBeanDefinitionException`を取得するときにどのようにリポジトリを呼び出すことができますtest.api.repositoryパッケージ

関連する問題