Предполагаемый тип «S» для параметра типа «S» находится за пределами его границ; должен расширять ua.com.store.entity.Country

У меня проблема с моим CountryServiceImpl, когда я хочу реализовать метод findOne в CountryServiceImpl, он сообщает мне: «Предполагаемый тип 'S' для параметра типа 'S' выходит за пределы его границ; должен расширять 'ua.com.store.entity.Country" .

Сам хотел исправить, но не понимаю, что это значит. Не могли бы вы помочь мне с этой проблемой.

Спасибо.

@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);
    }
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
10
0
29 713
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

Документация Spring определяет методы getOne следующим образом

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

В вашем методе вашим входным параметром является id типа int, но он не привязан к интерфейсу Example.

Чтобы найти объект с его идентификатором, вы можете использовать метод

Optional<T> findById(ID id)

В соответствии с вашей реализацией вы можете написать это

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

Можно быть актуальным о версии с весенней загрузкой. Я сталкиваюсь с той же проблемой, когда моя версия весенней загрузки - 2.0.1.RELEASE. Но после изменения версии с весенней загрузкой на 1.5.9.RELEASE проблема решена.

У вас есть доказательства, подтверждающие это?

JJJ 19.03.2019 09:16

Он существует в jar lib с именем spring-data-commons. Spring-data-commons jar lib зависит от библиотеки spring-boot-starter-data-jpa. Когда мои зависимости - org.springframework.boot:spring-boot-starter-data-jpa:1.5.9.‌​RELEASE, код class org.springframework.data.repository.CrudRepositorypublic interface CrudRepository<T, ID extends Serializable> extends Repository<T, ID>

yang 19.03.2019 15:52

Когда у меня зависимости org.springframework.boot:spring-boot-starter-data-jpa:2.0.1.‌​RELEASE, код org.springframework.data.repository.query.QueryByExampleExec‌​utorpublic interface QueryByExampleExecutor<T> А в версии 2.0.1.RELEASE нет файла интерфейса CrudRepository. кстати, есть один сэмпл по адресу github.com/spring-guides/tut-rest/issues/53.

yang 19.03.2019 15:52

Спасибо за ответы, пожалуйста, отредактируйте их в своем ответе, чтобы они могли помочь будущим посетителям. :)

JJJ 19.03.2019 15:52

100% рабочее решение следующее:

@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);
}

getOne - это метод JpaRepository, а findById - метод CrudRepository, я думаю, вы теперь поймете

Shahid Hussain Abbasi 22.11.2019 07:39

Я просто решил эту проблему в своей программе. Я не использую метод findOne, я просто сохранял исходные данные методом save. Оказывается, я скопировал свой интерфейс репо из другого интерфейса репо и забыл обновить объект в «расширяет JpaRepository <Object, Long>» на новый объект.

Благодарю. без вашего ответа я могу не думать об этом.

Ridwan 17.09.2021 10:02

Это сработало для меня ...


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

Другие вопросы по теме