2016-04-15 8 views
0

injizieren Ich suchte auf SO für ähnliche Fragen, aber ich fand keine sehr spezifische Antwort. Ich bin neu bei Springboot. Ich habe ein POJO in der Serviceebene definiert. Ich möchte ein Repository in diese Klasse einfügen. Irgendwie ist es immer die null. Hier ist mein Code-Struktur,SpringBoot: Repository in eine Klasse in Serviceschicht

Datei: 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; .... 

Datei: 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); 

} 

Jedes Mal, wenn ich versuche, courseRepository zu verwenden es gibt mir NullPointerException . Kannst du mir bitte dabei helfen?

+2

Wie erstellt man ein 'ResultInstitute'? – Reimeus

+0

Ich habe keinen Assistenten dafür verwendet. Geschrieben es manuell. –

+0

Sie missverstehen, wie instanziieren Sie die Klasse? – Reimeus

Antwort

1

Im Kommentarbereich sagten Sie, dass Ihr die ResultInstitute Klasse initiieren wie folgt,

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

Die Initialisierung wird von Ihnen selbst durchgeführt, daher funktioniert @Autowired in diesem Fall nicht. @Autowired ist eine Spring-Konfiguration, um die Bohnen zu injizieren, so dass Repository ResultInstitute von Spring Itself behandelt werden sollte.

Wir haben Frühling zu sagen, dass ResultInstitute Bean-Klasse für das ist, können Sie ResultIntitute Klasse als @Component

@Component 
public class ResultInititute 

So annotieren, wenn Sie ResultInstitute, instiate als Bean-Klasse mit @Autowired

instanziiert wollte
@Autowired 
ResultInstitute resultInstitute; 

Und die Verwendung des Repository in Entity-Klasse ist nicht gut, wir haben , um dies in separaten Abschnitt zu behandeln.

0

Sie müssen Ihre ResultInstitute mit @Component annotieren. Dies sagt dem Frühling, dass es Abhängigkeiten injizieren muss.

+0

Nein! funktioniert nicht. –

0

Fügen Sie es zu Ihrem Konstruktor @Document (indexname = "result_institute") public class ResultInstitute implementiert Serializable {

public CourseRepository courseRepository; 

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