Предполагаемый тип 'S' для параметра типа 'S' находится за его пределами;следует расширить "com.example.srilanka.model.Employee" - PullRequest
0 голосов
/ 23 февраля 2019

Я получаю вышеупомянутую ошибку (Inferred type 'S' for type parameter 'S' is not within its bound; should extend 'com.example.srilanka.model.Employee') при работе с проектом весенней загрузки.Я уже ссылался на все статьи по этой теме, где в стеке потока, а также другие учебники.Но я пока не смог найти решение.

package com.example.srilanka.dao;
import com.example.srilanka.model.Employee;
import com.example.srilanka.repository.EmployeeRepository;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.List;

public class EmployeeDAO {

    @Autowired
    EmployeeRepository employeeRepository;

    /*to save an employee*/


    public Employee save(Employee emp){
        return employeeRepository.save(emp);
    }

    /*search all employees*/
    public List<Employee> findAll(){
        return employeeRepository.findAll();
    }

    /*update an employee by id*/

    public Employee findOne(int empId){
        return employeeRepository.findOne(empId);  /*<----------error arise in here
    }

    /*get an employee*/

    /*delete an emmployee*/
}

мой репозиторий Employee находится здесь

package com.example.srilanka.repository;

import com.example.srilanka.model.Employee;
import org.springframework.data.jpa.repository.JpaRepository;

public interface EmployeeRepository extends JpaRepository<Employee, Integer> {

}

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Полагаю, вы обновили Spring-data-jpa зависимость.

Предыдущая подпись этого метода в CrudRepository была:

T findOne(ID id);

Теперь (начиная с версии 2.0) он стал (в QueryByExampleExecutor):

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

Но не волнуйтесь - вы можете использовать Optional<T> findById(ID id); из CrudRepository

0 голосов
/ 23 февраля 2019

Из документации findOne вернуть Optional<S>

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

Таким образом, вместо этого у вас есть два способа .orElse(null), чтобы получить даже объект или ноль, если его нет:

return employeeRepository.findOne(empId).orElse(null);

иначе измените тип вашего метода на Optional

public Optional<Employee> findOne(int empId) {
    return employeeRepository.findOne(empId);
}

или вы даже можете использовать orElseThrow, чтобы вызвать исключение, если объект не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...