2012-11-30 13 views
5

ObjectContentManagerを使用してノードの下にノードを追加したいとします。ObjectContentManagerを使用してノードの下にノードを追加する方法はありますか?

私はPojo2クラスの別のノードを追加する場合は、このノードの下に今

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

を使用して、ObjectContentManagerを使用して、単一ノードを追加することができています。 私はコードを書いたが、それは私に例外を与えている。

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

しかし、これは私には例外です。

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 

これはどのように達成できますか? ありがとうございます。 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; 

ビーン注釈は、あなたが別のノードとしてオブジェクトを永続化するのではなくことを示すために使用されるものです:あなたがOCMテストクラスを見れば

+0

を追加テストコードです)、pojoを永続化する方法を指定するために、XMLまたはJavaアノテーションを使用してマッピング記述子を設定します。あなたの質問にマッピング記述子情報を追加してください。 –

答えて

2

これが構成されるべきかの良い例がありますプロパティ。

ここでは、[ObjectContentManagerのチュートリアル](http://jackrabbit.apache.org/object-content-manager.htmlを読み取るようにBのオブジェクトをオブジェクト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(); 
関連する問題