Jpa存储库保存推断类型' S'对于类型参数' S'不在其范围内

时间:2018-06-06 14:08:37

标签: java spring-boot spring-data spring-data-jpa

我有实体用户

@Entity
@Data
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    private String username;

    private String password;

}

UserRepository

public interface UserRepository extends JpaRepository<UserRepository, Long> {
    User findByUsername(String username);
}

控制器

@RestController
@RequestMapping("/user")
public class UserController {

    private UserRepository userRepository;
    private BCryptPasswordEncoder bCryptPasswordEncoder;

    public UserController(UserRepository userRepository, BCryptPasswordEncoder bCryptPasswordEncoder) {
        this.userRepository = userRepository;
        this.bCryptPasswordEncoder = bCryptPasswordEncoder;
    }

    @PostMapping("/sign-up")
    public void signUp(@RequestBody User user) {
        user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
        userRepository.save(user);
    }
}

在signUp方法中的UserController类userRepository.save(user)throw error推断类型&#39; S&#39;对于类型参数&#39; S&#39;不在其范围内;应该实现&#39; Repository.UserRepository

6 个答案:

答案 0 :(得分:13)

您的存储库界面声明不正确。

更改

public interface UserRepository extends JpaRepository<UserRepository, Long> 

public interface UserRepository extends JpaRepository<User, Long> 

答案 1 :(得分:1)

对我来说,出现此错误是因为新版本的spring boot中的 module.exports = { pages: { index: { // entry for the page entry: 'src/main.js', // the source template template: 'public/dummy.html', // output as dist/index.html filename: 'dummy.html' } }, publicPath: '/', indexPath: 'dummy.html' } 方法不支持将save(list)作为参数,因此我将其替换为List of objects,因此{{ 1}}

答案 2 :(得分:0)

以下是另一个可行的解决方案

return customRepository.findById(id).orElse(null);

答案 3 :(得分:0)

在存储库界面中创建保存方法

void save(List<? extends User> user);

答案 4 :(得分:0)

原因:廖老师的春季靴使用1.4.1.RELEASE,新版本通常为2.0或更高版本。 解决方案:替换findOne方法

return repo.findById(id).orElse(null);

答案 5 :(得分:0)

新版本通常是 2.0 或更高版本有此更改。它们限制了对象的 Save() 方法。要保存列表类型的数据,我们必须使用 saveAll()