2012-11-30 11 views
5

Desidero aggiungere un nodo sotto un nodo utilizzando ObjectContentManager.Come posso aggiungere un nodo sotto un nodo usando ObjectContentManager?

sono in grado di aggiungere un singolo nodo utilizzando ObjectContentManager, utilizzando

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

Ora sotto questo nodo voglio aggiungere un altro nodo della classe Pojo2. Ho scritto un codice, ma mi sta dando un'eccezione.

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

Ma questo mi sta dando un'eccezione.

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 

Come posso ottenere questo? Grazie in anticipo.

+0

Mentre leggevo il [tutorial su ObjectContentManager] (http://jackrabbit.apache.org/object-content-manager.html), si imposta un descrittore di mappatura con annotazioni XML o Java per specificare il modo in cui il pojo deve essere mantenuto. Aggiungi le informazioni sul descrittore di mappatura alla tua domanda. –

risposta

2

Se si guardano le classi di test OCM c'è un buon esempio di come questo dovrebbe essere configurato: 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 annotazione è quello che è usato per indicare che il persistere l'oggetto come un altro nodo, piuttosto che una proprietà.

Ecco il codice di prova che aggiunge l'oggetto B l'un oggetto 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();