Java 推断类型';S';对于类型参数';S';不在其范围之内;应扩展到';ua.com.store.entity.Country

Java 推断类型';S';对于类型参数';S';不在其范围之内;应扩展到';ua.com.store.entity.Country,java,spring,spring-mvc,spring-boot,Java,Spring,Spring Mvc,Spring Boot,我的CountryServiceImpl有一个问题,当我想在CountryServiceImpl中实现findOne方法时,它告诉我“类型参数的推断类型”不在其范围内;应该扩展“ua.com.store.entity.Country” 我想自己修复,但我不明白这意味着什么。 你能帮我解决这个问题吗 多谢各位 @实体 @吸气剂 @塞特 @诺尔格构装师 @托斯特林 公营国家{ @身份证 @GeneratedValue(策略=GenerationType.IDENTITY) 私有int-id; 私有字

我的CountryServiceImpl有一个问题,当我想在CountryServiceImpl中实现findOne方法时,它告诉我“类型参数的推断类型”不在其范围内;应该扩展“ua.com.store.entity.Country”

我想自己修复,但我不明白这意味着什么。 你能帮我解决这个问题吗

多谢各位

@实体
@吸气剂
@塞特
@诺尔格构装师
@托斯特林
公营国家{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私有int-id;
私有字符串countryName;
@OneToMany(mappedBy=“国家”)
private Set brands=new HashSet();
}
公共接口CountryDAO扩展了JpaRepository{
@查询(“来自c国,其中c.countryName=:name”)
Country findByCountryName(@Param(“name”)字符串名);
}
公共接口服务{
无效保存(国家);
作废删除(国家);
列出findAll();
国家财政司司长(国际id);
国家/地区findByCountryName(字符串名称);
}
@服务
公共类CountryServiceImpl实现CountryService{
@自动连线
私家道道;
@凌驾
公共无效保存(国家/地区){
拯救(国家);
}
@凌驾
公共无效删除(国家/地区){
删除(国家);
}
@凌驾
公共列表findAll(){
返回dao.findAll();
}
@凌驾
公共国家/地区findOne(内部id){
返回dao.findOne(id);
}
@凌驾
公共国家/地区findByCountryName(字符串名称){
返回dao.findByCountryName(name);
}
}

Spring文档定义方法getOne如下

<S extends T> Optional<S> findOne(Example<S> example)

可能与spring启动版本有关。当我的spring boot版本是2.0.1.0版本时,我遇到了同样的问题。但在将spring boot版本更改为1.5.9.0版本后,问题得到解决。

一个100%可行的解决方案如下:

@Override
public Country findOne(int id) {
    return dao..findById(id).orElse(null);
}
你需要改变 从

public可选getOne(ID){
返回repository.findById(id);
}

我刚刚在程序中解决了这个问题。我没有使用findOne方法,我只是用save方法保存初始数据。原来我是从另一个repo接口复制了我的repo接口,忘了将“extends JpaRepository”中的对象更新为新对象。

这对我来说很有效




您是否有证据证实这一点?它存在于名为spring data commons的jar库中。SpringDataCommons jar库依赖于SpringBootStarter数据jpa库。当我的依赖项是org.springframework.boot:springbootstarter数据jpa:1.5.9.RELEASE时,代码
类org.springframework.data.repository.crudepository
公共接口crudepository扩展了存储库
当我的依赖项为
org.springframework.boot:spring boot starter数据jpa:2.0.1.RELEASE
,,代码
org.springframework.data.repository.query.QueryByExampleExecutor
公共接口QueryByExampleExecutor
,当2.0.1.RELEASE版本发布时,没有Crudepository接口文件。顺便说一句,这里有一个示例。感谢您的回复,请将其编辑到您的答案中,以便帮助未来的访问者。:)getOne是JPA还原的方法,findById是CRUDE还原的方法,我想你们现在会明白的
@Override
public Country findOne(int id) {
    return dao.findById(id);
}
@Override
public Country findOne(int id) {
    return dao..findById(id).orElse(null);
}
public T getOne(ID id) {
        return repository.getOne(id);
}
public Optional<T> getOne(ID id) {
        return repository.findById(id);
}
  @Override
    public Country findOne(int id) {
        return dao.findById(id).orElse(null);
    }