Нет подходящего компонента типа com.jpa.dao.UserRepository

Я впервые пробую String JPA.

Я следил за видео на Youtube сэра Дургеша.

Это ошибка

Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.jpa.dao.UserRepository' available
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:351)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:342)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1177)
    at com.jpa.demo.BootjpaApplication.main(BootjpaApplication.java:13)

Ниже приведены мои файлы

BootjpaApplication.java (содержит main)

package com.jpa.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import com.jpa.dao.UserRepository;
import com.jpa.entities.user;
@SpringBootApplication
public class BootjpaApplication {

    public static void main(String[] args) {
        ApplicationContext context= SpringApplication.run(BootjpaApplication.class, args);
        UserRepository userrepo= context.getBean(UserRepository.class);
        user user=new user();
        user.setName("Varun Dhawan");
        user.setCity("Paris");
        user.setStatus("happy");
        user user1= userrepo.save(user);
        System.out.println(user1);
    }

user.java (есть 4 переменные. id генерируется автоматически. Остальные 3 имеют геттеры и сеттеры.

package com.jpa.entities;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class user {
    @Id
    @GeneratedValue(strategy =GenerationType.AUTO)
    private int id;
    
    private String name;
    private String city;
    private String status;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    public user(int id, String name, String city, String status) {
        super();
        this.id = id;
        this.name = name;
        this.city = city;
        this.status = status;
    }
    public user() {
        super();
        // TODO Auto-generated constructor stub
    }
    @Override
    public String toString() {
        return "user [id = " + id + ", name = " + name + ", city = " + city + ", status = " + status + "]";
    }
    
}

UserRepository.java

package com.jpa.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.jpa.entities.user;
@Repository
public interface UserRepository extends JpaRepository<user,Integer> {
    
}

Application.properties

spring.datasource.name=jpa
spring.datasource.url=jdbc:mysql://localhost:3306/jpa
spring.datasource.username=root
spring.datasource.password=root@123
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect

spring.jpa.hibernate.ddl-auto=update

Спасибо!

В каком пакете находится BootjpaApplication? Он должен находиться в корневом пакете, чтобы все остальные компоненты могли быть обнаружены при сканировании компонентов.

crizzis 13.12.2020 17:32

@crizzis UserRespository находится в com.jpa.dao, BootjpaApplication — в com.jpa.demo, user.java — в com.jpa.entities. Что вы подразумеваете под корневым пакетом?

Sudo Pehpeh 13.12.2020 17:55

Я понял. @crizzis Большое спасибо

Sudo Pehpeh 13.12.2020 17:58
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
2 346
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

Похоже, ваши пакеты не сканируются должным образом.

Не могли бы вы попробовать добавить @SpringBootApplication(scanBasePackages = "com.jpa") вместо @SpringBootApplication.

какое имя пакета для класса BootjpaApplication?

Suraj Gautam 13.12.2020 17:56

UserRespository находится в com.jpa.dao, BootjpaApplication — в com.jpa.demo, user.java — в com.jpa.entities.

Sudo Pehpeh 13.12.2020 17:57

эй, спасибо, что обратили внимание на посылку. Ошибка возникла из-за того, что BootjpaApplication не находится в корневом пакете. Большое спасибо!

Sudo Pehpeh 13.12.2020 18:00

просто создайте один пакет (забудьте немного о связи и сделайте это). Затем поместите все классы (POJO, Main) и интерфейс (UserRepository) в этот пакет и перезапустите проект. Это будет работать.

Я вижу, это ваш первый ответ, и это здорово. Но поскольку уже есть принятый ответ, новые ответы должны попытаться улучшить его или, по крайней мере, обновить устаревшую информацию. Ваш ответ, вероятно, сработает, но он немного хакерский и на самом деле не решает проблему в вопросе. Но, пожалуйста, продолжайте в том же духе :)

W Almir 24.11.2021 13:03

ваша структура пакета должна быть такой, com.springcom.spring.DAOcom.spring.Modelcom.spring.Viewcom.spring.Controller

В файле pom.xml проверяется конфигурация спящего режима и JPA.

Такая же ошибка возникает в моем приложении

Я разрешаю это, добавляя конфигурацию

      <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
    </dependency>

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

Спасибо !

У меня были те же проблемы с репозиторием, который не был найден. Итак, что я сделал, так это переместил все в 1 пакет. И это сработало, а это значит, что с моим кодом все в порядке. Я переместил Repos & Entities в другой пакет и добавил следующее в класс SpringApplication.

@EnableJpaRepositories("com...jpa")
@EntityScan("com...jpa")

После этого я переместил службу (интерфейс и реализацию) в другой пакет и добавил следующее в класс SpringApplication.

@ComponentScan("com...service")

Это решило мои проблемы.

Пожалуйста, проверьте имя вашего пакета. Имя пакета должно быть иерархическим. нравиться

com.jpa.test  
com.jpa.test.dao  
com.jpa.test.entities

Другие вопросы по теме