Après avoir lu cet article JPA map relation entity parentID J'ai essayé d'appliquer ceci à mon code mais cela n'a pas fonctionné pour moi.Comment mapper une relation parent/enfant sur le même objet avec JPA
C'est le code que j'ai dans mon objet
@Entity
public class Category extends Model {
public static final int EASY = 1;
public static final int MEDIUM = 2;
public static final int HARD = 3;
public static final int VERRY_HARD = 4;
public String name;
public String fullName;
public boolean active;
public Date createdOn;
public int difficulty;
@ManyToOne
@JoinColumn(name = "FK_PARENT_CATEGORY")
public Category parentCategory;
@OneToMany(mappedBy="parentCategory", cascade = CascadeType.ALL)
public List<Category> subCategories;
public Category(Category parentCategory, String name, boolean active) {
this.name = name;
this.active = active;
this.parentCategory = parentCategory;
this.subCategories = new ArrayList<Category>();
this.createdOn = new Date();
this.difficulty = Category.EASY;
this.fullName = name;
if (parentCategory != null)
this.fullName = parentCategory.fullName + "/" + this.fullName;
}
Maintenant, c'est le test que je lance
@Test
public void testParentAndSubCategories() {
//Create the parent category
new Category(null, "Sport", true).save();
Category sportCat = Category.find("byName", "Sport").first();
//Test the newly created parent category state
assertNotNull(sportCat);
assertEquals("Sport", sportCat.name);
assertEquals(true, sportCat.active);
assertEquals("Sport", sportCat.fullName);
assertNull(sportCat.parentCategory);
assertEquals(0, sportCat.subCategories.size());
//Create the subCategory
new Category(sportCat, "Hockey", false).save();
Category hockeyCat = Category.find("byName", "Hockey").first();
// Test the newly created sub category
assertNotNull(hockeyCat);
assertEquals("Hockey", hockeyCat.name);
assertEquals(false, hockeyCat.active);
assertEquals("Sport/Hockey", hockeyCat.fullName);
assertNotNull(hockeyCat.parentCategory);
assertEquals("Sport", hockeyCat.parentCategory.name);
assertEquals(0, sportCat.subCategories.size());
//Fetch new values for parent category
sportCat = Category.find("byName", "Sport").first();
// Test updated parent category
assertEquals(1, sportCat.subCategories.size());
assertEquals("Hockey", sportCat.subCategories.get(0).name);
}
Cette ligne du test échouent toujours.
// Test updated parent category
assertEquals(1, sportCat.subCategories.size());
Sur la base de la configuration que j'ai pour mes relations, Hibernate ne peut pas récupérer la sous-catégorie et je ne sais pas pourquoi. Maintenant j'espère vraiment que ce n'est pas stupide de ma part parce que je vais me tirer dessus (même s'il est tard et que je suis fatigué). En passant, ne vous occupez pas des variables publiques dans le code, j'utilise play! (Playframework) et il s'occupe de l'encapsulation. Merci d'avance pour toute aide
C'est exactement ce que j'ai fait. J'ai ajouté une méthode pour ajouter une sous-catégorie à une catégorie parente. J'ai modifié mon test en conséquence et cela fonctionne exactement comme je le veux maintenant. Merci beaucoup Ralph. Et merci à tous les autres pour leurs réponses. – Alain