2012-11-30 12 views
5

Chcę dodać węzeł pod węzłem przy użyciu ObjectContentManager.Jak mogę dodać węzeł pod węzłem przy użyciu ObjectContentManager?

jestem w stanie dodać pojedynczy węzeł przy użyciu ObjectContentManager korzystając

Pojo1 p1 = new Pojo1(); 
p1 .setPath("/p1"); 
p1 .setName("p_3"); 
p1 .insert(p1); 
ocm.save(); 

Teraz pod tym węzłem chcę dodać inny węzeł klasy Pojo2. Napisałem kod, ale daje mi wyjątek.

Pojo2 p2 = new Pojo2(); 
p2.setPath("/p1/p2"); 
p2.setName("p_3"); 
p2.insert(p2); 
ocm.save(); 

Ale to daje mi wyjątek.

org.apache.jackrabbit.ocm.exception.ObjectContentManagerException: Cannot create new node of type nt:pojo1 from mapped class class com.sapient.Pojo1; nested exception is javax.jcr.nodetype.ConstraintViolationException: No child node definition for p2 found in node /p1 

Jak mogę to osiągnąć? Z góry dzięki.

+0

Jak czytam [tutorial ObjectContentManager] (http://jackrabbit.apache.org/object-content-manager.html), skonfigurujesz deskryptor odwzorowania za pomocą adnotacji XML lub Java, aby określić sposób utrzymywania twojego pojo. Dodaj informacje deskryptora mapowania do Twojego pytania. –

Odpowiedz

2

Jeśli spojrzeć na zajęciach testowych OCM jest dobrym przykładem tego, w jaki sposób powinien być skonfigurowany: A.java

@Node(jcrMixinTypes="mix:lockable") 
public class A 
{ 
@Field(path=true) private String path; 
@Field private String a1; 
@Field private String a2; 
@Bean(jcrType="nt:unstructured", jcrOnParentVersion="IGNORE") private B b; 

The Bean Adnotacja jest to, co jest używane aby zaznaczyć, że utrzymująca się obiekt jako innego węzła zamiast własność.

Oto kod testu, który dodaje obiekt B obiektu AnnotationBeanDescriptorTest.java

ObjectContentManager ocm = getObjectContentManager(); 
// ------------------------------------------------------------------------ 
// Create a main object (a) with a null attribute (A.b) 
// ------------------------------------------------------------------------ 
A a = new A(); 
a.setPath("/test"); 
a.setA1("a1"); 
ocm.insert(a); 
ocm.save(); 

// ------------------------------------------------------------------------ 
// Retrieve 
// ------------------------------------------------------------------------ 
a = (A) ocm.getObject("/test"); 
assertNotNull("Object is null", a); 
assertNull("attribute is not null", a.getB()); 

B b = new B(); 
b.setB1("b1"); 
b.setB2("b2"); 
a.setB(b); 

ocm.update(a); 
ocm.save(); 
Powiązane problemy