存储库中的 SpringBoot findById 方法不起作用

问题描述 投票:0回答:3

Error Message 我正在尝试制作一个简单的 SpringBoot 应用程序,但在尝试运行它时出现此错误。不知道为什么。

@Service
public class UserService {

    @Autowired
    UserRepository userRepository;

    public User getUserByEmail(String email) {
        return userRepository.findByEmail(email);
    }


    public User createUser(User u) {
        User user = userRepository.save(u);
        return user;
    }

    public void deleteUserById(Long id) {
        userRepository.deleteById(id);
    }

    public User findUserById(Long id) {
        return userRepository.findById(id);
    }
}

这也是存储库的链接: https://github.com/deckard20202020/HelpingHand

spring-boot spring-data
3个回答
0
投票

我想我只需要添加

Jpa存储库

JpaRepository 已经实现了许多常用的签名。其中之一是

<T> findById(Integer id);
,它与包含
Long
作为 id 参数的签名发生冲突。

您不必添加签名,您已经可以开箱即用。

既然我看到你在怀疑要使用什么抽象,这里是抽象层次结构的顺序:

  • 存储库
  • CrudRepository
  • 分页和排序存储库
  • Jpa存储库
  • 您也可以制作自己的抽象

你自己的抽象

public interface SomeJpaRepository extends SomeRepositry, CrudRepositry<Some, Long> {
    // Extra functionality on top of the provided CRUD
}

public interface SomeRepository {
    // Implemented methods and helpers to be used by the service
}

旁注:您也不需要添加 @Repository 注解,因为 Spring Data 已经扫描类路径以查找 JpaRepository 类型的任何接口或类。


0
投票

0
投票

我认为你需要使用

@Transactional(readonly = true)
装饰来实现
findUserById
中的
UserService
功能。

© www.soinside.com 2019 - 2024. All rights reserved.