Spring Entity Autowired Repository Null指针

时间:2016-04-02 10:53:14

标签: java spring

我有以下实体类,在创建对象之前应调用getUniqueSlug方法来检查是否已存在具有相同名称的项目。

@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

我还有以下测试来检查它是否正确完成:

@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,所以我认为问题出在Category类中自动装配存储库的某个地方。到底在哪里?

2 个答案:

答案 0 :(得分:1)

您应该根据MVC概念将所有方法与实体类分开。 所有方法都使用自动装配的存储库定位到Service类中。 还要检查应用程序上下文是否包含repository bean。

答案 1 :(得分:0)

你不要在实体类中使用spring bean,因为spring不管理实体clases所以没有自动装配private CategoryRepository categoryRepository;这一行所有时间抛出空指针异常