2016-04-02 13 views
2

Nesneyi oluşturmadan önce, aynı ada sahip öğelerin olup olmadığını kontrol etmek için getUniqueSlug yöntemini çağırması gereken aşağıdaki varlık sınıfına sahibim.Yay Varlığı Otomatik Kablolu Depo Boş İşaretçisi

@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 

Ben de düzgün yaparsa kontrol etmek için aşağıdaki test var: O testi çalıştırdığınızda

@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()); 
} 

, ben NullPointerException olsun, bu yüzden sorun Autowiring yerde olduğunu varsayalım Category sınıfında depo. Nerede tam olarak? Bahar varlık yönetemez çünkü

+1

Yineleme, temel sorunun ne olduğunu açıklar, ancak veri nesnesini, özellikle gizli olanları olan hizmet bağımlılıkları ile karıştırmak kötü bir biçimdir. Eğer slug mantığınızı bu şekilde * uygulayabilmeniz * gerekiyorsa, 'CategoryRepository' kelimesini jeneratör metodu olarak parametre olarak geçiriniz. – chrylis

cevap

0

bunu private CategoryRepository categoryRepository; bu hat autowired değil clases, varlık sınıfında bahar fasulye kullanmak Yüklü her zaman atmak boş işaretçi istisna

1

Sen MVC konsepte göre varlık sınıfından tüm yöntemleri ayırmak gerekir. Tüm yöntemler, otomatik sarılmış depo ile Servis sınıfında bulunur. Ayrıca, uygulama içeriğinin size depo fasulye içerdiğini de kontrol edin.

İlgili konular