类型参数“ S”的推断类型“ S”不在其范围内;应该扩展'ua.com.store.entity.Country

时间:2018-10-03 19:27:25

标签: java spring spring-mvc spring-boot

我的CountryServiceImpl遇到问题,当我想在CountryServiceImpl中实现方法findOne时,它告诉我“类型参数'S'的推断类型'S'不在其范围内;应扩展'ua.com.store.entity 。国家”。

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

谢谢。

@Entity
@Getter
@Setter
@NoArgsConstructor
@ToString
public class Country {

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

private String countryName;

@OneToMany(mappedBy = "country")
private Set<Brand> brands = new HashSet<Brand>();


 }


public interface CountryDAO extends JpaRepository<Country, Integer> {

@Query("from Country c where c.countryName=:name")
Country findByCountryName(@Param("name") String name);

  }



public interface CountryService {

void save(Country country);
void delete(Country country);
List<Country> findAll();
Country findOne(int id);
Country findByCountryName(String name);


 }



@Service
public class CountryServiceImpl implements CountryService {

@Autowired
private CountryDAO dao;

@Override
public void save(Country country) {
    dao.save(country);
}

@Override
public void delete(Country country) {
    dao.delete(country);
}

@Override
public List<Country> findAll() {
    return dao.findAll();
}

@Override
public Country findOne(int id) {
    return dao.findOne(id);
}

@Override
public Country findByCountryName(String name) {
    return dao.findByCountryName(name);
}
 }

6 个答案:

答案 0 :(得分:1)

Spring文档将方法getOne定义如下

Route::group(['prefix' => 'administration', 'middleware' => 'admin'], function(){
  Route::get('/dashboard', 'Admin\DashboardController@index')->name('admin.dashboard');
});

在您的方法中,您的输入参数是int类型的'id',但不限于接口Example。

要找到带有“ id”的实体,可以使用方法

ERR_TOO_MANY_REDIRECTS

根据您的实现,您可以编写

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

答案 1 :(得分:1)

可能与spring-boot版本有关。当我的春季启动版本为2.0.1.RELEASE时,我遇到相同的问题。但是将spring-boot版本更改为1.5.9.RELEASE之后,就可以解决。

答案 2 :(得分:1)

以下是100%有效的解决方案:

@Override
public Country findOne(int id) {
    return dao..findById(id).orElse(null);
}

答案 3 :(得分:1)

我刚刚在程序中解决了这个问题。我不使用findOne方法,我只是使用save方法保存初始数据。原来,我已经从另一个存储库接口复制了我的存储库接口,却忘记了将“扩展JpaRepository ”中的对象更新为新对象。

答案 4 :(得分:0)

您需要更改 来自

public T getOne(ID id) {
        return repository.getOne(id);
}

收件人

public Optional<T> getOne(ID id) {
        return repository.findById(id);
}

答案 5 :(得分:0)

这对我有用...


  @Override
    public Country findOne(int id) {
        return dao.findById(id).orElse(null);
    }