Después de leer esta publicación JPA map relation entity parentID Intenté aplicar esto a mi código, pero esto no funcionó.Cómo correlacionar una relación padre/hijo en el mismo objeto con JPA
Este es el código que tengo en mi objeto
@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;
}
Ahora bien, esta es la prueba corro
@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);
}
Esta línea de la prueba siempre fracasan.
// Test updated parent category
assertEquals(1, sportCat.subCategories.size());
Sobre la base de la configuración que tengo por mis relaciones, Hibernate no puede recuperar la subcategoría y yo no sé por qué. Ahora realmente espero que esto no sea algo estúpido de mi parte porque me voy a haber disparado a mí mismo (incluso si es tarde y estoy cansado). Por cierto, no me importan las variables públicas en el código, estoy usando play! (Playframework) y se encarga de la encapsulación. Gracias de antemano por cualquier ayuda
Esto es exactamente lo que hice. Agregué un método para agregar una subcategoría a una categoría principal. Modifiqué mi prueba en consecuencia y funciona exactamente como quiero ahora. Muchas gracias Ralph. Y gracias a todos los demás por sus respuestas. – Alain