Ich habe die folgende Entitätsklasse, die vor dem Erstellen eines Objekts die getUniqueSlug
-Methode aufrufen sollte, um zu überprüfen, ob bereits Elemente mit demselben Namen vorhanden sind.Spring Entity Autowired Repository Nullzeiger
@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
Ich habe auch den folgenden Test zu überprüfen, ob sie es richtig funktioniert:
@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());
}
Wenn ich diesen Test ausführen, bekomme ich die NullPointerException
, so nehme ich an, dass das Problem irgendwo ist die in autowiring Repository in der Category
Klasse. Wo genau?
Das Duplikat erklärt, was das Kernproblem ist, aber es ist eine schlechte Form, das Datenobjekt mit Dienstabhängigkeiten, insbesondere verborgenen, zu mischen. Wenn Sie Ihre Slug-Logik * auf diese Weise * implementieren müssen, übergeben Sie das 'CategoryRepository' als Parameter an die Generatormethode. – chrylis