我正在使用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;
}
有什么建议吗?
答案 0 :(得分:9)
我遇到了同样的问题,我通过切换Spring Boot版本修复了它。更改Spring Data JPA版本什么也没做(这是我认为错误的地方),所以我认为Spring Boot 1.5.1版本中存在一个错误。我切换回1.4.3版本,错误消失了。我没有尝试后续/不同的版本,因此您可能只需要试验您的依赖项及其版本。
对于记录,您可以使用@Repository
注释您的服务类,它不应该有任何区别。我一直在使用service / dao模式以相同的方式设置这些应用程序,而且注释从未过于挑剔。希望这可能有助于其他Spring Boot开发流程突然抛出错误的人!
答案 1 :(得分:4)
您使用的是spring-data-commons和spring-data-jpa的哪个版本。我刚刚使用spring-data-commons 1.13.x和spring-data-jpa 1.10.x遇到了这个问题。将spring-data-jpa升级到1.11.x为我解决了这个问题。
答案 2 :(得分:0)
确保:
1)TopicRepository注释为@Repository
。
2)您已配置扫描包:
<jpa:repositories base-package="mypkg.repositories"></jpa:repositories>
答案 3 :(得分:0)
将Spring Boot更新到1.5.4后,我也遇到了同样的问题。
我也在使用版本1.0.4的spring-data-envers
。升级到1.4.1解决了这个问题。
我希望它有助于某人:)
答案 4 :(得分:0)
在1.5.2上有同样的问题。升级到1.5.5解决了这个问题。
答案 5 :(得分:0)
您可以使用Applicationcontext将存储库注入此参考topicRepository。
您只需在@rest控制器类中声明applicationcontext
与使用批注的topicRepository相同。然后,将其传递给服务类,该服务类应通过构造函数获取参数。
前
public TopicService(Applicationcontext ctx) {this.topicRepository =context.getBean(TopicRepository.class);
}