存储库中的SpringBoot findById方法不工作

kb5ga3dv  于 4个月前  发布在  Spring
关注(0)|答案(3)|浏览(45)

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

k0pti3hp

k0pti3hp1#

我想我只需要在返回类型上添加<Optional。

bkhjykvo

bkhjykvo2#

JpaRepository

JpaRepository已经实现了许多常用的签名,其中之一是<T> findById(Integer id);,它与包含Long作为id参数的签名冲突。
您不必添加签名,您已经可以使用它开箱即用。
既然我看到你在怀疑要使用什么抽象,下面是抽象层次的顺序:

  • 存储库
  • CrudRepository
  • PagingAndSortingRepository
  • JpaRepository
  • 你也可以自己抽象

自己抽象

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 annotation,因为Spring Data已经扫描了JpaRepository类型的任何接口或类的classpath。
vd2z7a6w

vd2z7a6w3#

我认为你需要使用@Transactional(readonly = true)装饰UserService中的findUserById功能。

相关问题