Spring com.code.service.BookServiceImpl中的FieldBookRepository需要类型为';com.myAppp.code.respository.BookRepository';那是找不到的

Spring com.code.service.BookServiceImpl中的FieldBookRepository需要类型为';com.myAppp.code.respository.BookRepository';那是找不到的,spring,spring-boot,spring-data-jpa,Spring,Spring Boot,Spring Data Jpa,我在尝试构建/运行SpringBoot应用程序时收到一个错误,如下所示: com.myApp.code.service.BookServiceImpl中的Field bookRepository需要一个类型为“com.myApp.code.respository.booksrepository”的bean,但找不到该bean。 所涉及的存储库是: package com.myApp.code.respository; import com.myApp.code.model.Book; impo

我在尝试构建/运行SpringBoot应用程序时收到一个错误,如下所示:

com.myApp.code.service.BookServiceImpl中的Field bookRepository需要一个类型为“com.myApp.code.respository.booksrepository”的bean,但找不到该bean。

所涉及的存储库是:

package com.myApp.code.respository;

import com.myApp.code.model.Book;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface BookRepository extends CrudRepository<Book, Long> {    
}
在有关控制员中,我有:

@Controller
@RequestMapping(value="book")
public class BookController {

    @Autowired         
    private BookService bookService;    
    @Autowired   
    private PersonService personService;  
    @Autowired
    private BookValidator bookValidator;      

    private final Logger LOG = LoggerFactory.getLogger(getClass().getName());

    public BookController() {       
    }

    // Displays the catalogue.
    @RequestMapping(value="/catalogue", method=RequestMethod.GET)
    public String index(Model model) {           
        LOG.info(BookController.class.getName() + ".catalogue() method called."); 

        // Populate catalogue.        
        bookService.list();      
//        model.addAttribute("books", books);   

        // Set view.                  
        return "/catalogue";               
    }  
在Application.java文件中,我有:

@SpringBootApplication
@EnableJpaRepositories
@ComponentScan(basePackages="com.myApp.code")
public class Application {

    private final Logger LOG = LoggerFactory.getLogger(getClass().getName());


    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
图书类为:

@Entity
@Table(name="BOOK")
public class Book implements Serializable {

    // Fields.
    @Id
    @Column(name="id", unique=true, nullable=false)
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;

    @Column(name="AUTHOR", nullable=false, length=50)
    private String author;

    @Column(name="TITLE", nullable=false, length=100)
    private String title;

    @Column(name="DESCRIPTION", nullable=false, length=500)
    private String description;

    @Column(name="ONLOAN", nullable=false, length=5)
    private String onLoan;

    @ManyToOne(fetch=FetchType.EAGER, targetEntity = Person.class)
    @JoinColumn(name="Person_Id", nullable=true)    
    private Person person;
我的Maven POM文件是:

<dependencies>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency> 

       <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derbyclient</artifactId>
            <version>10.14.2.0</version>
        </dependency>      
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

org.springframework.boot
spring引导启动器数据jpa
org.springframework.boot
弹簧启动装置
org.springframework.boot
SpringBootStarterWeb
org.apache.derby
德比客户机
10.14.2.0
org.springframework.boot
弹簧起动试验
测试

有人能告诉我为什么我会收到这个消息吗?类
BookRepository
毕竟是存在的。

Spring boot将只在同一个包或主类的子包(
Application
)中查找存储库、实体和组件。您已经添加了
@ComponentScan
以指向另一个包,但是您还应该将包添加到
@EntityScan
@EnableJpaRepositories
,例如:

@SpringBootApplication
@EnableJpaRepositories("com.myApp.code") // Add this
@EntityScan("com.myApp.code") // Add this 
@ComponentScan(basePackages="com.myApp.code")
public class Application {
    // ...
}
这一点也在本报告中提到

或者,您可以将主类放入
com.myApp.code
本身


将您的
应用程序
类放在
com.myApp.code
包中,而不是子包中戴纳姆

通过执行此操作,可以删除所有三个注释:

@SpringBootApplication//可以删除其他注释
公共类应用程序{
// ...
}

添加完整的堆栈跟踪请在
com.myApp.code
包而不是子包中替换
应用程序
类。@M Deinum。如果你想把你的评论转换成答案,我会接受的。非常感谢。
@SpringBootApplication
@EnableJpaRepositories("com.myApp.code") // Add this
@EntityScan("com.myApp.code") // Add this 
@ComponentScan(basePackages="com.myApp.code")
public class Application {
    // ...
}