如何修复CrudRepository.save(java.lang.Object)是springboot中的无法访问方法?

时间:2016-04-19 09:04:55

标签: java spring spring-mvc spring-boot spring-data

我正在考虑这个springboot教程并在我的项目中使用spring data,我试图添加data to database。使用以下. bt当我试图这样做时,我得到一个错误说

  

调用方法public abstract java.lang.Object   org.springframework.data.repository.CrudRepository.save(java.lang.Object中)   不是访问方法!

这是我的代码,

//my controller

@RequestMapping("/mode")
    public String showProducts(ModeRepository repository){
        Mode m = new Mode();
        m.setSeats(2);
        repository.save(m); //this is where the error getting from
        return "product";
    }


//implementing crud with mode repository
@Repository
public interface ModeRepository extends CrudRepository<Mode, Long> {

}

 //my mode class
@Entity
@Table(name="mode")
public class Mode implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(unique=true, nullable=false)
    private int idMode; 


    @Column(nullable=false)
    private int seats;

    //assume that there are getters and setters
}

我是springboot的新手,有人能说出我做错了什么, 感谢有人能为我提供一个了解springdata的链接 除了spring documentation

之外

2 个答案:

答案 0 :(得分:12)

更改您的控制器代码,以便ModeRepository是一个私有的自动连接字段。

    @Autowired //don't forget the setter
    private ModeRepository repository; 

    @RequestMapping("/mode")
    public String showProducts(){
        Mode m = new Mode();
        m.setSeats(2);
        repository.save(m); //this is where the error getting from
        return "product";
    }

答案 1 :(得分:1)

我今天偶然发现了这个错误。 IntelliJ IDEA告诉我,不建议使用直接场注入,这在某种程度上是有意义的。您还可以在@Controller上使用构造函数注入。可能看起来像是头顶上的东西,但我认为它更干净。

@Controller
public class WhateverController {

    private ModeRepository repository;

    public WhateverController(ModeRepository repository) {
        this.repository = repository;
    }

    @RequestMapping("/mode")
    public String showProducts(){
        Mode m = new Mode();
        m.setSeats(2);
        repository.save(m); //this is where the error getting from
        return "product";
    }    
}