Home > Mobile >  org.springframework.beans.factory.UnsatisfiedDependencyException Spring JPA
org.springframework.beans.factory.UnsatisfiedDependencyException Spring JPA

Time:05-19

i need help to solve this error here, for my college project.

I created an online database and from there I tried to develop a service to be consumed later, the problem is that when I run to test the service I get these errors, I've looked in many places to try to correct them, but so far all the attempts were unsuccessful. I would really appreciate it if someone could detect the error that is happening and help correct it.

Thank you so much. :D

pom.xml


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

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
        </dependency>
    </dependencies>

Aplication:

package com.teig.DescubraPortugal;

import com.teig.DescubraPortugal.repositories.UtilizadorRepository;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;


@ComponentScan({"com.teig.DescubraPortugal.controllers","com.teig.DescubraPortugal.services","com.teig.DescubraPortugal.repositories"})
@SpringBootApplication
public class DescubraPortugalApplication  {



    public static void main(String[] args) {
        SpringApplication.run(DescubraPortugalApplication.class, args);
    }

}

Repository:


@Repository
public interface UtilizadorRepository extends JpaRepository<Utilizador, Integer> {

}

Service:



@Service
public class UtilizadorService {

@Autowired
UtilizadorRepository utilizadorRepository;
    public List<Utilizador> findUsers(){
        return utilizadorRepository.findAll();
    }

}

Controller:


@RestController
@RequestMapping("user")
public class UtilizadorController {

    @Autowired
    UtilizadorService utilizasddorService;

    @GetMapping("/all")
    public List<Utilizador> findUsers(){
        return utilizasddorService.findUsers();
    }
}

Error appeared:

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'utilizadorController': Unsatisfied dependency expressed through field 'utilizasddorService'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'utilizadorService' defined in file [C:\Users\telmo\OneDrive\Documentos\GitHub\DescubraPortugalWS\target\classes\com\teig\DescubraPortugal\services\UtilizadorService.class]: Post-processing of merged bean definition failed; nested exception is java.lang.IllegalStateException: Failed to introspect Class [com.teig.DescubraPortugal.services.UtilizadorService] from ClassLoader [sun.misc.Launcher$AppClassLoader@18b4aac2]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.19.jar:5.3.19]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:415) [spring-boot-2.6.7.jar:2.6.7]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) com.teig.DescubraPortugal.DescubraPortugalApplication.main(DescubraPortugalApplication.java:23) [classes/:na] 

 Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'utilizadorService' defined in file [sun.misc.Launcher$AppClassLoader@18b4aac2]


 Caused by: java.lang.IllegalStateException: Failed to introspect Class [com.teig.DescubraPortugal.services.UtilizadorService] from ClassLoader [sun.misc.Launcher$AppClassLoader@18b4aac2]
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594) ~[spring-beans-5.3.19.jar:5.3.19]
    ... 29 common frames omitted ```

 Caused by: java.lang.NoClassDefFoundError: org/springframework/data/jpa/repository/JpaRepository
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[na:1.8.0_291]
    at org.springframework.util.ReflectionUtils.getDeclaredFields(ReflectionUtils.java:738) ~[spring-core-5.3.19.jar:5.3.19]
    ... 35 common frames omitted 

 Caused by: java.lang.ClassNotFoundException: org.springframework.data.jpa.repository.JpaRepository
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382) ~[na:1.8.0_291]

Thanks Again for the help

CodePudding user response:

Don't look at your model, so I created one to test your application:

package com.teig.descubraportugal.model;

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

@Entity
public class Utilizador {
    
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    
}

The application worked normally with this model, but I used the H2 database that works in memory with a console accessible by the browser. You can configure in:

  1. application.properties:
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.show-sql=true
  1. pom.xml:
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>

to see the database http://localhost:8080/h2-console/

CodePudding user response:

As the error says: Spring can't create bean utilizadorController because it needs utilizasddorService bean which Spring can't find class for.

I bet it has something to do with your custom @ComponentScan. Try removing it or make sure your packages structure looks like this:

    com.teig.DescubraPortugal
    |- DescubraPortugalApplication.java
    |- controllers
    |  |- UtilizadorController.java
    |- services
    |  |- UtilizadorService.java
    |- repositories
    |  |- UtilizadorRepository.java
  • Related