我遇到下一个错误:
Field ansRepo in com.myproject.services.ansService required a bean of type 'com.myproject.repositories.ansRepo' that could not be found.
我有一个控制器,该控制器具有4个带有自动连线注释的服务:
@RestController
public class Controller {
@Autowired
private AnsService ansService
@Autowired
private QService QService;
@Autowired
private UService UService;
每个服务都有@Service批注:
@Service
public class ansService {
@Autowired
private AnsRepo ansrepo;
每个存储库还具有@Repository批注:
@Repository
public interface AnsRepo extends JpaRepository<Ans,Long> {
...
}
该错误出现在控制器中的第一个自动装配对象上,因此似乎spring应用程序找不到自动装配类。
我的项目的结构:
-com.myproject
----Main.java
----controllers
------------Controller.java
----entities
------------ans.java
----repositories
------------ansRepo.java
----services
------------ansService.java
我的主要人:
package com.postmalone.Application;
import org.springframework.boot.SpringApplication;
@SpringBootApplication(scanBasePackages={"com.myproject.controllers",
"com.myproject.services", "com.myproject.repositories",
"com.myproject.entities"})
public class Main {
public static void main(String[] args) throws InterruptedException {
SpringApplication.run(Main.class,args);
我很确定问题出在@SpringBootApplication注释中。我看到有很多关于此错误的帖子,但就我而言,我已经实现了所提供的所有解决方案。
您知道我还要检查什么吗?
---- UPDATE ---
我在主应用程序中添加了@EnableJpaRepositories(“ com.myproject.repositories”)批注。现在我得到了下一个错误:
Field ansRepo in com.postmalone.services.AnswService required a bean named 'entityManagerFactory' that could not be found.
pom.xml文件中的依赖项:
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.1.4</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.3.6.Final</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.3.6.Final</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
</dependencies>
有人知道为什么在拥有@SpringBootApplication时为什么需要提及@EnableJPARepostiory批注?以及为什么我会收到该错误?
答案 0 :(得分:0)
好的,我注意到您没有一个根包,控制器,实体,存储库和服务应该共享该根包。 为了扫描根包的开头,只需按以下方式添加:
@SpringBootApplication(scanBasePackages = "com.myproject")
并通过以下方式重命名其他软件包:
com.myproject
> Main.java
com.myproject.controllers
> Controller.java
com.myproject.entities
> Ans.java
com.myproject.repositories
> AnsRepo.java
com.myproject.services
> AnsService.java
答案 1 :(得分:0)
在我的情况下,解决方案是在pom.xml中添加下一个依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
而不是:
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.3.6.Final</version>
</dependency>