Spring Boot JPA CrudRepository

时间:2017-02-15 15:56:29

标签: spring spring-boot spring-data spring-data-jpa

我正在使用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;
}

有什么建议吗?

6 个答案:

答案 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); }