我有以下实体类,在创建对象之前应调用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
类中自动装配存储库的某个地方。到底在哪里?
答案 0 :(得分:1)
您应该根据MVC概念将所有方法与实体类分开。 所有方法都使用自动装配的存储库定位到Service类中。 还要检查应用程序上下文是否包含repository bean。
答案 1 :(得分:0)
你不要在实体类中使用spring bean,因为spring不管理实体clases所以没有自动装配private CategoryRepository categoryRepository;
这一行所有时间抛出空指针异常