java 服务在我的Springboot项目中找不到存储库Bean

ffx8fchx  于 2023-04-19  发布在  Java
关注(0)|答案(2)|浏览(126)

首先,我想给予很多感谢大家谁读我的问题,并希望帮助我解决它,所以,我有一个问题,这是关于没有找到bean在我的项目.我有一个仓库名为“UserRepository”和在我的服务是“UserService”有@Autowired该仓库,它没有找到我的仓库,虽然我添加了仓库注解.“UserService”没有找到仓库bean
这是我的问题:
应用程序启动失败
说明:
com.baothien.server.User.UserService中构造函数的参数0需要类型为“com.baothien.server.User.UserRepository”的Bean,但找不到该Bean。
行动:
考虑在您的配置中定义一个类型为'com.baothien.server.User.UserRepository'的bean。
进程已完成,退出代码为0
我的项目结构:My project structure
UserRepository.java

package com.baothien.server.User;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    @Query("SELECT * FROM Users")
    List<User> getAllUsers();
}

UserService.java

package com.baothien.server.User;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {
    @Autowired
    private final UserRepository userRepository;

    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public List<User> getAllUsers() {
        return userRepository.getAllUsers();
    }
}

UserController.java

package com.baothien.server.User;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping("/api/v1")
public class UserController {
    @Autowired
    private final UserService userService;
    public UserController(UserService userService) {
        this.userService = userService;
    }

    @GetMapping("/test")
    public String test() {
        return "GET User API succesfully!";
    }

    @GetMapping("/get-users")
    public List<User> getUsers() {
        return userService.getAllUsers();
    }
}

User.java

package com.baothien.server.User;

import jakarta.persistence.*;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;

@Entity
@Table
@Data
@NoArgsConstructor
public class User {
    @Id
    @SequenceGenerator(
            name = "user_sequence",
            sequenceName = "user_sequence",
            allocationSize = 1
    )
    @GeneratedValue(
            strategy = GenerationType.SEQUENCE,
            generator = "user_sequence"
    )
    private Long id;
    private String email;
    private String fullName;
    private String role;
    private String password;
}

主要方法

package com.baothien.server;

import com.baothien.server.User.UserController;
import com.baothien.server.User.UserRepository;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

@SpringBootApplication
@EntityScan(basePackages = {"com.baothien.server.User.*"})
@EnableJpaRepositories(basePackages = {"com.baothien.server.User.*"})
public class ServerApplication {

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

}

我已经尽力了,但是这个问题还是没有解决,我真的需要一个解决方案。谢谢你阅读我的问题,再见。

UPDATE:我使用@ComponentScan:

@ComponentScan(basePackages = "com.baothien.server.User.*")

它运行,但当我在Postman上测试时,它有白色标签错误,找不到页面(http://localhost:8080/api/v1/test)。正如你所看到的,我的控制器有/test路径,我不明白为什么它有这个错误。
我试着在很多论坛上找到解决方案,但都不能解决这个问题

3qpi33ja

3qpi33ja1#

你在努力。
1.你不需要@EntityScan
1.你不需要@EnableJpaRepositories

  1. Spring Data存储库接口上的@Repository不做任何事情
  2. JpaRepository或者更确切地说CrudRepository已经有了一个findAll来检索所有实体。放弃你的getAllUsers方法吧。
    1.您使用的是错误的@Id,您使用的是Spring Data,而您需要的是jakarta.persistence
    第4点和第5点实际上是你的问题,因为你写的查询是错误的,它应该读为SELECT u FROM User u。这是一个JPQL而不是SQL查询。然而,正如所述,你不需要它,因为已经有一个findAll方法。需要一个@Id用于JPA实体,所以这也会使它失败。
clj7thdc

clj7thdc2#

您的basePackages太窄。请尝试

EntityScan(basePackages = {"com.baothien.server"})

相关问题