2016-04-15 14 views
0

私は同様の質問でSOを検索しましたが、特に具体的な答えは見つかりませんでした。 私はSpringbootを初めて使用しています。私はサービス層で定義されたPOJOを持っています。私は、このクラスにリポジトリを注入したい。なんとなく、いつもそれはnullになる。サービス/ ResultInstitute.javaSpringBoot:サービスレイヤーで定義されたクラスにリポジトリを挿入する

@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; .... 

ファイル:ここに私のコードの構造、

ファイルである私はcourseRepositoryを使用しようとしているときはいつでもリポジトリ/ 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); 

} 

が、それは私を与えるNullPointerException 。これで私を助けてもらえますか?

+2

どのように 'ResultInstitute'を作成しますか? – Reimeus

+0

私はそのためのウィザードを使用しませんでした。手動で書いてください。 –

+0

あなたは誤解していますが、どのようにクラスをインスタンス化しますか? – Reimeus

答えて

1

を実装して、あなたのコンストラクタ @Document(INDEXNAME = "result_institute")に追加します
ResultInstitute resultInstitute = new ResultInstitute(i); resultInstitute.locationFilterString(i); 

開始は自分で処理されるため、@Autowiredはこの場合動作しません。 @AutowiredはBeanを注入するためのスプリング設定です。リポジトリResultInstituteを挿入するには、Spring Iteselfで処理する必要があります。

私たちはResultInstituteはあなたが@Autowired

を使用してBeanクラスとしてResultInstitute、instiateをインスタンス化したいときにいつでも

@Component 
public class ResultInititute 

ので@ComponentとしてResultIntituteクラスに注釈を付けることができるため、Beanクラスであることを春に伝える必要があり

@Autowired 
ResultInstitute resultInstitute; 

エンティティクラスのレポジトリを使用するのは良いことではありません。別のセクションでこれを処理するのは です。

0

ResultInstitute@Componentと注釈を付ける必要があります。これは、依存関係を注入する必要があることを春に伝えます。

+0

Nope!働いていない。 –

0

パブリッククラスResultInstituteはSerializableを{あなたは次のようにあなたがResultInstituteクラスを開始すると言ったコメントセクションで

public CourseRepository courseRepository; 

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