2012-11-30 17 views
5

Ich möchte einen Knoten unter einem Knoten mit ObjectContentManager hinzufügen.Wie kann ich einen Knoten unter einem Knoten mit ObjectContentManager hinzufügen?

Ich bin in der Lage einen einzelnen Knoten mit ObjectContentManager,

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

Jetzt hinzufügen möchte ich einen anderen Knoten von Pojo2 Klasse hinzuzufügen. Ich habe einen Code geschrieben, aber es gibt mir eine Ausnahme.

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

Aber das gibt mir Ausnahme.

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 

Wie kann ich das erreichen? Vielen Dank im Voraus.

+0

Objekt fügt Als ich das [Tutorial auf ObjectContentManager] lesen (http://jackrabbit.apache.org/object-content-manager.html), richten Sie einen Mapping-Deskriptor mit XML- oder Java-Annotationen ein, um festzulegen, wie Ihr pojo beibehalten werden soll. Fügen Sie Ihrer Frage die Informationen zum Mapping-Deskriptor hinzu. –

Antwort

2

Wenn man sich die OCM Testklassen aussehen gibt es ein gutes Beispiel dafür, wie dies sollte so konfiguriert werden: 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 Annotation ist, was verwendet, um anzuzeigen, dass Ihr das Objekt als einen anderen Knoten persistierenden statt Ein Besitz.

Hier ist der Testcode, der die B Objekt A 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(); 
Verwandte Themen