Can't @Autowire repository interface Spring Boot

13,727

You need to scan for JpaRepositories add this annotation on your application Class :

@EnableJpaRepositories("com.leagueofsummoners.persistence.interfaces")

EDIT:

In order to configure the entityManager you need to add the following dependency :

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

if you add this dependency it will configure the repositories automatically for you so you don't need to add the@EnableJpaRepositories.

Share:
13,727
No One
Author by

No One

Passionate about programming, video games, music and travelling. Currently living in New Zealand.

Updated on June 18, 2022

Comments

  • No One
    No One almost 2 years

    The problem I'm facing is about @Autowire the repository interface (UserRepository in my case), I don't know why, but the @Autowire is failing.

    UserController class calls a @Service class and this one calls a @Component (DAO class), the DAO class is @Autowiring the @Repository.

    Spring boot main

    package com.leagueofsummoners;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
    import org.springframework.boot.context.embedded.ErrorPage;
    import org.springframework.boot.orm.jpa.EntityScan;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
    import org.springframework.http.HttpStatus;
    
    import com.leagueofsummoners.persistence.interfaces.UserRepository;
    
    @SpringBootApplication
    public class LeagueofsummonersApplication {
        public static void main(String[] args) {
            SpringApplication.run(LeagueofsummonersApplication.class, args);
        }
    
        @Bean
        public EmbeddedServletContainerCustomizer containerCustomizer() {
            return (container -> {
                ErrorPage error401Page = new ErrorPage(HttpStatus.UNAUTHORIZED, "/401.html");
                ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/404.html");
                ErrorPage error500Page = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500.html");
    
                container.addErrorPages(error401Page, error404Page, error500Page);
            });
        }
    }
    

    DTO CLASS (Entity)

    @Entity(name = "user")
    @Table(name = "users")
    public class UserDTO implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    @Id
    @Column(name = "id_user")
    private Long idUser;
    
    @Column(nullable = false, name = "summoner_name")
    private String summonerName;
    @Column(nullable = false)
    private String username;
    @Column(nullable = false)
    private String password;
    @Column(nullable = false)
    private String email;
    @Column(nullable = false)
    private String avatar;
    @Column(nullable = false)
    private String firma;
    @Column(nullable = false, name = "permission_level")
    private PermissionLevels permissionLevel;
    
    public UserDTO() {
    }
    

    Repository interface

    import org.springframework.data.domain.Page;
    import org.springframework.data.domain.Pageable;
    import org.springframework.data.repository.Repository;
    
    import com.leagueofsummoners.model.dto.UserDTO;
    
    @org.springframework.stereotype.Repository
    public interface UserRepository extends Repository<UserDTO, Long> {
    
        Page<UserDTO> findAll(Pageable pageable);
    
        UserDTO findByUsernameIgnoringCase(String username);
    
        UserDTO findByIdUser(int idUser);
    }
    

    DAO class (this one failing when autowiring repository class)

    @Component
    public class UserDAO{
    
        @Autowired
        private UserRepository userRepository;
    
        public UserDTO findByUsernameIgnoringCase(String username) {
            return this.userRepository.findByUsernameIgnoringCase(username);
        }
    }
    

    Here's a link with the log of the console