[英]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.