के साथ एक ही ऑब्जेक्ट पर अभिभावक/बाल संबंध को कैसे मैप करूँगा इस पोस्ट को पढ़ने के बाद JPA map relation entity parentID मैंने इसे अपने कोड पर लागू करने का प्रयास किया लेकिन यह मेरे लिए काम नहीं किया।मैं जेपीए
यह मैं
@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);
}
परीक्षण की यह पंक्ति चलाने हमेशा असफल
@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;
}
अब इस परीक्षण है कोड मैं अपने वस्तु में है।
// Test updated parent category
assertEquals(1, sportCat.subCategories.size());
सेटअप मैं अपने संबंधों के लिए है के आधार पर, हाइबरनेट उपश्रेणी प्राप्त नहीं कर सकता है और मैं पता नहीं क्यों। अब मैं वास्तव में उम्मीद करता हूं कि यह मेरे हिस्से पर कुछ बेवकूफ नहीं है क्योंकि मैं खुद को शूट करने जा रहा हूं (यहां तक कि अगर देर हो चुकी है और मैं थक गया हूं)। वैसे, कोड में सार्वजनिक चर को ध्यान में रखें, मैं play का उपयोग कर रहा हूं! (Playframework) और यह encapsulation का ख्याल रखता है। किसी भी मदद के लिए अग्रिम धन्यवाद
यह वही है जो मैंने किया था। मैंने अभिभावक श्रेणी में उपश्रेणी जोड़ने के लिए एक विधि जोड़ा। मैंने तदनुसार अपना परीक्षण संशोधित किया और यह ठीक वैसे ही काम करता है जैसा मैं चाहता हूं। बहुत बहुत धन्यवाद राल्फ। और जवाब के लिए हर किसी के लिए धन्यवाद। – Alain