2016-04-02 23 views
2

オブジェクトを作成する前に、getUniqueSlugメソッドを呼び出して、同じ名前のアイテムが存在するかどうかを確認する、次のエンティティクラスがあります。私はそのテストを実行するとSpring Entity Autowired Repository Null Pointer

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = Application.class) 
@WebAppConfiguration public class CategoryTest { 

private MockMvc mockMvc; 

@Autowired private CategoryRepository categoryRepository; 

@Autowired ObjectMapper objectMapper; 

@Autowired private WebApplicationContext webApplicationContext; 

@Before public void setUp() throws Exception { 
    this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); 

    this.categoryRepository.deleteAll(); 
    this.categoryRepository.save(new Category("My category name")); 
} 

@Test public void testUniqueSlug() throws Exception { 
    String slug = "My category name"; 
    int integer = 1; 
    while (categoryRepository.findBySlug(Slug.toSlug(slug)) != null) { 
     slug = slug + " " + integer; 
     integer++; 
    } 
    this.categoryRepository.save(new Category(slug)); 
    System.out.println(this.categoryRepository.findAll()); 
} 

、私はNullPointerExceptionを取得するので、私は、問題がどこかにオートワイヤリングであることを前提としています。私もそれが正しくそれをしないかどうかをチェックするために、次のテストを持っている

@Entity public class Category { 
@Column private Long id; 

@Column(nullable = false) private String name; 

@Column(nullable = false) private String slug; 

@Autowired private CategoryRepository categoryRepository; 

public String getUniqueSlug(String name) { 
    int i = 1; 

    while (this.categoryRepository.findBySlug(Slug.toSlug(name)) != null) { 
     name = name + " " + i; 
     i++; 
    } 

    return Slug.toSlug(name); 
} 

// Constructors 

public Category() { 
} 

public Category(String name) { 
    this.name = name; 
    this.slug = getUniqueSlug(name); 
} 

// Getters and setters 

リポジトリはCategoryクラスにあります。正確にはどこで?春のエンティティを管理していないので、

+1

重複は、コアの問題点を説明していますが、データオブジェクトとサービスの依存関係、特に隠れたものを混在させるのは悪いフォームです。そのようにしてスラッグロジックを実装する必要がある場合は、 'CategoryRepository'をジェネレータメソッドにパラメータとして渡します。 – chrylis

答えて

0

は、あなたはとてもprivate CategoryRepository categoryRepository;このラインautowiredないclases、エンティティクラスの春の豆を使用してはいけないすべての時間スローnullポインタ例外

1

あなたはMVCの概念に基づいてエンティティクラスからすべてのメソッドを分ける必要があります。 すべてのメソッドは、autowiredリポジトリを持つServiceクラスに配置されます。 また、アプリケーションコンテキストにリポジトリBeanが含まれていることを確認してください。

関連する問題