我的模型和接口有什么问题? (Java Spring 启动 webapp)

What is wrong with my Model and Interface? (Java Spring Boot webapp)

我在 运行 期间遇到一个错误,它说(为简洁起见省略了完整目录:

Error creating bean with name 'idea_Service' defined in file [...com\vincentsnow\brightideas\services\Idea_Service.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'idea_Repository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not a managed type: class java.lang.Object

还有一个:

Error creating bean with name 'idea_Repository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not a managed type: class java.lang.Object

我没有在任何地方使用过这些小写名称。我无法理解此消息...我猜它正在尝试编译但由于某种原因更改了文件名。 STS 在我的文件中没有发现任何错误。他们在这里:

Idea_Service.java(服务)

    package com.vincentsnow.brightideas.services;

import java.util.List;
import org.springframework.stereotype.Service;
import com.vincentsnow.brightideas.models.Idea;
import com.vincentsnow.brightideas.models.User;
import com.vincentsnow.brightideas.repositories.Idea_Repository;

@Service
public class Idea_Service {
    private Idea_Repository ideaRepository;
    public Idea_Service(Idea_Repository ideaRepository){
        this.ideaRepository = ideaRepository;
    }

    public List<Idea> allIdeas(){
        return ideaRepository.findAllIdeas();
    }

    public void createUser(String idea, User posted_by){
        ideaRepository.save(idea, posted_by);
    }

    public Idea oneIdea(Long id) {
        return ideaRepository.getSingleIdeaWhereId(id);
    }

    public List<Idea> likesof(Long id){
        return ideaRepository.getLikesOfIdea(id);
    }
}

Idea.java(型号)

package com.vincentsnow.brightideas.models;

import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.validation.constraints.Size;
import com.vincentsnow.brightideas.models.User;

@Entity
public class Idea {

        @Id
        @GeneratedValue
        private Long id;

        @Column
        @Size(min=3, max=5000)
        private String idea;

        @ManyToOne(fetch = FetchType.LAZY)
        @JoinColumn(name="idea_id")
        private User posted_by;

        @ManyToMany(fetch = FetchType.LAZY)
        @JoinTable(
            name = "likes", 
            joinColumns = @JoinColumn(name = "idea_id"), 
            inverseJoinColumns = @JoinColumn(name = "user_id")
            )
            private List<Idea> likes;


}

Idea_Repository.java(存储库)

package com.vincentsnow.brightideas.repositories;

import java.util.List;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import com.vincentsnow.brightideas.models.Idea;
import com.vincentsnow.brightideas.models.User;

@Repository
public interface Idea_Repository extends CrudRepository {

    @Query("SELECT a FROM ideas a")
    List<Idea> findAllIdeas();

    @Query(value="INSERT INTO ideas (idea, posted_by) VALUES (?1, ?2, ?3, ?4)", nativeQuery=true)
    Idea save(String idea, User posted_by);

    @Query("SELECT a FROM ideas a WHERE id=?1")
    Idea getSingleIdeaWhereId(Long id);

    @Query(value="SELECT likes WHERE idea_id = ?1", nativeQuery=true)
    List<Idea> getLikesOfIdea(Long id); 

}

他们怎么了?这个错误是什么意思? STS 试图做什么?

CrudRepository 有两个形参,一个是它管理的类型,另一个是该类型的 ID 类型。由于您没有提供这些参数,它们实际上是 ObjectObject:错误消息指出 Object 不是可管理的对象(它没有注释 @Entity).您需要告诉 Spring 数据,您的存储库 class 实际上试图管理的是 Idea。尝试:

public interface Idea_Repository extends CrudRepository<Idea, Long> {
    // ..
}

此外,您不需要 findAllIdeassavegetSingleIdeaWhereId; Spring Data JPA 免费提供等效方法。