SpringBoot:将存储库注入服务层中定义的类

时间:2016-04-15 15:41:14

标签: java dependency-injection spring-boot repository

我在SO上搜索了类似的问题,但是我找不到非常具体的答案。 我是Springboot的新手。我在服务层中定义了一个POJO。我想将存储库注入此类。不知何故,它始终是 float(row.split(',')[0].strip()) 。这是我的代码结构,

file:service / ResultInstitute.java

null

file:repository / CourseRepository.java

@Document(indexName = "result_institute")
public class ResultInstitute implements Serializable {


@Inject
public CourseRepository courseRepository;

/**
 * 
 */
private static final long serialVersionUID = -2168910694195614091L;

public ResultInstitute(Institute institute)  {

    // Initialize all the values.

    for (Course course : institute.getCourses()){
        HashMap<String, String> courseDetails = courseRepository.getCourseDetails(course.getId());
        course.setCourseDetails(courseDetails);
        courses.add(course);
    }
    courses       = institute.getCourses();

    for (Course course : courses){
        subCategories.put(course.getSubCategory().getId(), course.getSubCategory().getDisplayName());
        categories.put(course.getSubCategory()
                             .getCategory()
                             .getId(), 
                       course.getSubCategory()
                             .getCategory()
                             .getDisplayName());
    }
}

public ResultInstitute (){}

private Long id;

private String code; ....

每当我尝试使用public interface CourseRepository extends JpaRepository<Course,Long> { @Query("select distinct course from Course course left join fetch course.institutes") List<Course> findAllWithEagerRelationships(); @Query("select course from Course course left join fetch course.institutes where course.id =:id") Course findOneWithEagerRelationships(@Param("id") Long id); @Query(value="SELECT DISTINCT(ci.course_details) FROM course_institute ci WHERE ci.courses_id = ?1", nativeQuery = true) HashMap<String, String> getCourseDetails(Long id); } 时,它都会给我courseRepository。能帮帮我吧。

3 个答案:

答案 0 :(得分:1)

在评论部分,您说您启动了ResultInstitute类,如下所示,

ResultInstitute resultInstitute = new ResultInstitute(i); resultInstitute.locationFilterString(i);

启动由您自己处理,因此@Autowired在这种情况下不起作用。 @Autowired是一个注入bean的spring配置,所以为了注入Repository ResultInstitute应该由Spring Iteself处理。

我们必须告诉spring,ResultInstitute是bean类,你可以将ResultIntitute类注释为@Component

@Component 
public class ResultInititute

因此,每当您想要实例化ResultInstitute时,使用@Autowired

作为bean类进行instiate
@Autowired
ResultInstitute resultInstitute;
  

在Entity类中使用Respository并不是件好事,我们有   在单独的部分处理这个问题。

答案 1 :(得分:0)

您需要使用ResultInstitute@Component添加注释。这告诉spring它必须注入依赖项。

答案 2 :(得分:0)

将其添加到构造函数中     @Document(indexName =&#34; result_institute&#34;)     公共类ResultInstitute实现Serializable {

    public CourseRepository courseRepository;

    @Autowired
    public ResultInstitute (Institute institute, CourseRepository courseRepository) {
        this.courseRepository = courseRepository;
    }
}