Spring Data JPAの使用方法を研究しています。どこが間違っているかを確認するのに役立ちます。複数の@EnableJpaRepositoriesクラスを定義するとjpaデータリポジトリに保存操作が実行されない
私は2つのJPAリポジトリを作成した:2つの異なるパッケージでAPIRepository
とClientRepository
ともそれぞれ@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);
}
}
内を移動?これはApplicationContextの作成時に発生するはずです。また、リポジトリやサービスを使用して終了する必要があります。この質問には何かがありません。 –