【问题标题】:Inferred type-variable(S)推断类型变量(S)
【发布时间】:2018-08-28 20:16:46
【问题描述】:

我需要一些帮助我不知道该怎么做 我遇到了这些错误,我无法处理它们我尝试了几件事,但到目前为止没有任何效果

错误 1:

Error:(56, 35) java: method exists in interface org.springframework.data.repository.query.QueryByExampleExecutor 不能应用于给定类型; 必需:org.springframework.data.domain.Example 找到:java.lang.Integer 原因:无法推断类型变量 S (参数不匹配;java.lang.Integer 无法转换为 org.springframework.data.domain.Example)

错误 2:

Error:(60, 49) java: 接口 org.springframework.data.repository.query.QueryByExampleExecutor 中的方法 findOne 不能应用于给定类型; 必需:org.springframework.data.domain.Example 找到:java.lang.Integer 原因:无法推断类型变量 S (参数不匹配;java.lang.Integer 无法转换为 org.springframework.data.domain.Example)

ArticleController.java

@Controller
public class ArticleController {
    @Autowired
    private ArticleRepository articleRepository;
    @Autowired
    private UserRepository userRepository;

    @GetMapping("/article/create")
    @PreAuthorize("isAuthenticated()")
    public String create(Model model){
        model.addAttribute("view", "article/create");

        return "base-layout";
    }

    //method calling for creating the article
    @PostMapping("/article/create")
    @PreAuthorize("isAuthenticated()")
    public String createProcess(ArticleBindingModel articleBindingModel){
        UserDetails user = (UserDetails) SecurityContextHolder.getContext()
                .getAuthentication().getPrincipal();

        User userEntity = 
        this.userRepository.findByEmail(user.getUsername());

        Article articleEntity = new Article(
                articleBindingModel.getTitle(),
                articleBindingModel.getContent(),
                userEntity
        );

        this.articleRepository.saveAndFlush(articleEntity);

        return "redirect:/";
    }

    @GetMapping("/article/{id}")
    public String details(Model model, @PathVariable Integer id){

        if(!this.articleRepository.exists(id)){
            return "redirect:/";
        }

        Article article = this.articleRepository.findOne(id);

        model.addAttribute("article", article);
        model.addAttribute("view", "article/details");

        return "base-layout";
    }
}

这是我的文章实体

@Entity
@Table(name = "articles")
public class Article {
    private Integer id;
    private String title;
    private String content;
    private User author;


    public Article() {

    }
    //article constructor
    public Article(String title, String content, User author){
        this.title = title;
        this.content = content;
        this.author = author;
    }

    @Transient
    public String getSummary(){
        return this.getContent().substring(0, this.getContent().length() /2) + ". . .";
    }

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    @Column(nullable = false)
    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    @Column(columnDefinition = "text", nullable = false)
    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    @ManyToOne()
    @JoinColumn(nullable = false, name = "authorId")
    public User getAuthor() {
        return author;
    }

    public void setAuthor(User author) {
        this.author = author;
    }

}

ArticleRepository.java

public interface ArticleRepository extends JpaRepository<Article, Integer> {

}

【问题讨论】:

    标签: java spring-mvc web thymeleaf


    【解决方案1】:

    查看类似问题的答案:https://stackoverflow.com/a/49224641/2031954

    TL,DR: 方法existsfindOne 接收Example&lt;S&gt; 的实例作为参数,因此您错误地使用了它们。请改用existsByIdfindById

    【讨论】:

    • 它修复了第一个错误,但当我将 findOne(id) 更改为 findById(id) 时,它显示 >Error:(61, 58) java: incompatible types: java.util.Optional 无法转换为 test.blog.blog.Entity.Article 我用 Optional
      article = this.articleRepository.findById(id);
      修复了它
    • @Rumen 是的,findById(id) 将返回一个Optional&lt;Article&gt;。您可以使用.get() 检索值:Optional&lt;Article&gt; result = articleRepository.findById(id); if(result.isPresent()) { Article article = result.get(); ..... } 或者更简单:Article article = articleRepository.findById(id).orElse(null); if(article != null) { ..... }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    相关资源
    最近更新 更多