簡體   English   中英

SpringBoot:將存儲庫注入到服務層中定義的類中

[英]SpringBoot: Inject repository into a class defined in service layer

我在SO上搜索了類似的問題,但是沒有找到非常具體的答案。 我是Springboot的新手。 我在服務層中定義了一個POJO。 我想將存儲庫注入此類。 不知何故,一直以來它都是null 這是我的代碼結構,

文件:service / ResultInstitute.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; ....

文件:repository / CourseRepository.java

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它都會給我NullPointerException 你能幫我這個忙嗎?

在注釋部分中,您說您按以下方式啟動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類進行初始化。

@Autowired
ResultInstitute resultInstitute;

在實體類中使用Repository不是一件好事,我們必須在單獨的部分中進行處理。

您需要使用@Component注釋ResultInstitute 這告訴spring它必須注入依賴項。

將其添加到構造函數@Document(indexName =“ result_institute”)公共類ResultInstitute實現Serializable {

    public CourseRepository courseRepository;

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM