2012-11-30 31 views
5

Tôi muốn thêm một nút dưới một nút bằng cách sử dụng ObjectContentManager.Làm thế nào tôi có thể thêm một nút dưới một nút bằng cách sử dụng ObjectContentManager?

tôi có thể thêm một nút duy nhất sử dụng ObjectContentManager, sử dụng

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

Bây giờ dưới nút này, tôi muốn thêm một nút của lớp Pojo2. Tôi đã viết mã, nhưng nó cho tôi ngoại lệ.

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

Nhưng điều này mang lại cho tôi ngoại lệ.

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 

Làm cách nào tôi có thể đạt được điều này? Cảm ơn trước.

+0

Như tôi đã đọc [hướng dẫn về ObjectContentManager] (http://jackrabbit.apache.org/object-content-manager.html), bạn thiết lập một bộ mô tả ánh xạ với các chú thích XML hoặc Java để xác định cách pojo của bạn được duy trì. Vui lòng thêm thông tin mô tả ánh xạ vào câu hỏi của bạn. –

Trả lời

2

Nếu bạn nhìn vào các lớp học thử nghiệm OCM có một ví dụ điển hình về cách thức này nên được cấu hình: 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; 

Các Bean Chú là những gì được sử dụng để chỉ ra rằng bạn kiên trì đối tượng như nút khác chứ không phải là một tài sản.

Dưới đây là các mã kiểm tra có thêm các đối tượng B A phản đối 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(); 
Các vấn đề liên quan