【问题标题】:Inferred type 'S' for type parameter 'S' is not within its bound; should extend 'ua.com.store.entity.Country类型参数“S”的推断类型“S”不在其范围内;应该扩展'ua.com.store.entity.Country
【发布时间】:2019-03-09 02:47:34
【问题描述】:

我的 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);
    }
}

【问题讨论】:

    标签: java spring spring-mvc spring-boot


    【解决方案1】:

    Spring 文档定义方法 getOne 如下

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

    在您的方法中,您的输入参数是 int 类型的“id”,但不限于接口示例。

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

    Optional<T> findById(ID id)
    

    根据你的实现你可以写

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

    【讨论】:

      【解决方案2】:

      可能与 spring-boot 版本相关。当我的 spring-boot 版本是 2.0.1.RELEASE 时,我遇到了同样的问题。但是将spring-boot版本改成1.5.9.RELEASE后,就解决了。

      【讨论】:

      • 你有证据证实这一点吗?
      • 存在于名为spring-data-commons的jar库中。 spring-data-commons jar lib 依赖于 spring-boot-starter-data-jpa lib。当我的依赖是org.springframework.boot:spring-boot-starter-data-jpa:1.5.9.RELEASE时,代码class org.springframework.data.repository.CrudRepositorypublic interface CrudRepository&lt;T, ID extends Serializable&gt; extends Repository&lt;T, ID&gt;
      • 当我的依赖是org.springframework.boot:spring-boot-starter-data-jpa:2.0.1.RELEASE时,代码org.springframework.data.repository.query.QueryByExampleExecutor public interface QueryByExampleExecutor&lt;T&gt; 而当2.0.1.RELEASE版本时,没有CrudRepository接口文件。顺便说一句,github.com/spring-guides/tut-rest/issues/53 有一个样本。
      • 感谢您的回复,请将它们编辑到您的答案中,以便他们可以帮助未来的访问者。 :)
      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 谢谢。没有你的回答,我可能不会考虑这个。
        【解决方案5】:

        你需要改变 来自

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

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

        【讨论】:

        • getOne 是 JpaRepository 的方法, findById 是 CrudRepository 的方法,我想你现在明白了
        【解决方案6】:

        这对我有用...


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

        【讨论】:

          【解决方案7】:

          我遇到了同样的问题。

          ua.com.store.entity.Country -> 就像添加一个外部实体

          您必须导入将在项目中使用的实体“Country”的正确目录。 例如

          import com.RomanSyhock.Entity.Country;
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-03-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-11-13
            • 2011-05-24
            • 1970-01-01
            相关资源
            最近更新 更多