我正在尝试制作一个简单的 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);
}
}
我想我只需要添加
JpaRepository 已经实现了许多常用的签名。其中之一是
<T> findById(Integer id);
,它与包含 Long
作为 id 参数的签名发生冲突。
您不必添加签名,您已经可以开箱即用。
既然我看到你在怀疑要使用什么抽象,这里是抽象层次结构的顺序:
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 类型的任何接口或类。
我认为你需要使用
@Transactional(readonly = true)
装饰来实现 findUserById
中的 UserService
功能。