Spring Boot + Spring Data JPAを使用していて、CrudRepositoryを拡張するクラスを挿入しようとすると、この問題に直面します。
原因:org.springframework.beans.factory.BeanCreationException:「topicRepository」という名前のBeanの作成中にエラーが発生しました:一致するコンストラクターを解決できませんでした(ヒント:型のあいまいさを避けるために、単純なパラメーターのインデックス/型/名前の引数を指定してください)
リポジトリクラス:
public interface TopicRepository extends CrudRepository<Topic, Integer> {}
サービスクラス:
@Service
public class TopicService {
@Autowired
private TopicRepository topicRepository;
}
助言がありますか?
同じ問題が発生していましたが、SpringBootのバージョンを切り替えることで修正しました。 Spring Data JPAバージョンを変更しても何も起こらなかったので(これはバグがあると私が想定した場所です)、SpringBootバージョン1.5.1にバグがあると思います。バージョン1.4.3に戻したところ、エラーはなくなりました。私は後続の/異なるバージョンを試していなかったので、依存関係とそのバージョンを試してみる必要があるかもしれません。
ちなみに、サービスクラスに@Repository
アノテーションを付けることができますが、違いはありません。私はこれらのアプリをservice/daoパターンを使用して同じように設定してきましたが、アノテーションを使用するのが面倒だったことは一度もありません。うまくいけば、これは、SpringBoot開発フローが突然エラーをスローする他の人を助けるかもしれません!
どのバージョンのspring-data-commonsとspring-data-jpaを使用していますか。 spring-data-commons1.13.xとspring-data-jpa1.10.xを使用してこれに遭遇しました。 spring-data-jpaを1.11.xにアップグレードすると、問題が修正されました。
1.5.2でも同じ問題が発生しました。 1.5.5にアップグレードすると、問題が解決しました。
Spring Bootを1.5.4にアップデートした後、私も同じ問題を抱えていました。
バージョン1.0.4のspring-data-envers
も使用しています。 1.4.1にアップグレードすると、問題が解決しました。
私はそれが誰かを助けることを願っています:)
Applicationcontextを使用して、この参照topicRepositoryにリポジトリを挿入できます。アノテーションを使用して、topicRepositoryと同じ@restコントローラークラスでapplicationcontextを宣言するだけです。次に、これをサービスクラスに渡します。サービスクラスは、コンストラクターを介してパラメーターを取得する必要があります。 Ex- public TopicService(Applicationcontext ctx) {this.topicRepository =context.getBean(TopicRepository.class); }
確認してください:
1)TopicRepositoryには@Repository
の注釈が付けられています。
2)スキャンパッケージを構成しました。
<jpa:repositories base-package="mypkg.repositories"></jpa:repositories>