jackrabbit-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From conflue...@apache.org
Subject [CONF] Apache Jackrabbit: How to map associations between objects (page edited)
Date Thu, 04 Sep 2008 21:16:00 GMT
How to map associations between objects (JCR) edited by Christophe Lombart
      Page: http://cwiki.apache.org/confluence/display/JCR/How+to+map+associations+between+objects
   Changes: http://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=96517&originalVersion=2&revisedVersion=3






Content:
---------------------------------------------------------------------

h2. Overview

This tutorial explains how to map associations between objects (1:1 and 1:n). You can find
the tutorial code sample from [here|^Beans_and_collections.zip]. It is based on Maven and
ready to be used inside Eclipse. If you have some configuration issues, please review the
tutorial "[A simple OCM project with Maven & Eclipse]". 

h2. The Conctent Model 

We will extend the content model created in the previous tutorial [5' with Jackrabbit OCM].
Each PressRelease is made by an Author and it is possible to add some references (URL). 

So, we have to add 2 new associations in our model  : 
- An 1:1 association between a PressRelease and an Author.
- An 1:n association between PresseRelease and Url. 


Here is the main java class, the PressRelease : 

{code}
@Node
public class PressRelease
{
    @Field(path=true) private String path;
    @Field  private String title;
    @Field  private Date pubDate;
    @Field  private String content;
    @Bean private Author author;
    @Collection  List<Url> urls;
    
    //if you want a map instead of a list, use the following declaration
    @Collection Map<String,Url> map;
    
    [... Add here getters & setters ...]

}
{code}

Since the tutorial [5' with Jackrabbit OCM], we can understand the goal of the annotations
@Node and @Field. 
An association 1:1 can be specified with the annotation @Bean like 
{code}
@Bean private Author author;
{code}

It is possible to set extra settings with this annotation but it is out of the scope of this
tutorial.You can review the code of the Author class which is very simple. As you will see,
it is not mandatory to add annotation @Field(path=true) in the Author class because it is
an aggregation of a PressRelease.

An 1:n association can be specified with the annotation @Collection like 
{code}
@Collection  List<Url> urls;
{code}	

For this kind of association, you can also use a Map instead of a Collection
{code} 
@Collection Map<String,Url> map;
{code}


Right now, the support of Map is limited to the usage of String for the key because the map
key will be used as the Node name.


h2.How are those objects stored in the repository ?


For this tutorial each java class is mapped into the "nt:unstructured" node type. Making this
kind of mapping is quite flexible because it does not imply specific repository configuration.
There is no constraints in the JCR repository. All constrains are defined in the java code.


{info}
Note : It is possible to associate a specific node type to each java class but this imply
more repository configurations. 
       It is also possible to change the corresponding JCR node structure by using specific
Bean or Collection converters. 
       Later, we will add more tutorials on OCM converters. 
{info}

Following our example, the Author and Urls nodes will be created as subnodes of a press release.

Here is an example of the correspoding JCR structure : 

{code}
- PressRelease_1 
	* path : "/mypath/myrelease"
	* title : "..."
	* pubDate : 10/06/08
	* content :  "...."
	- Author
		* firstName : "..."
		* lastName : "..."
	- urls
		* url1 
			* url : "http://...."
			* caption : "..."
			* description : "..."
		* url2 
			* url : "http://...."
			* caption : "..."
			* description : "..."
		...
	- map
	   * Apache
	       * url : "http://www.apache.org"
               * caption : "..."
               * description : "..."
            
           * Jackrabbit
              * url : "http://jackrabbit.apache.org"
              * caption : "..."
              * description : "..."
		
{code}

h2.Download the tutorial code

You can download the OCM project from [here|^Beans_and_collections.zip] 



---------------------------------------------------------------------
CONFLUENCE INFORMATION
This message is automatically generated by Confluence

Unsubscribe or edit your notifications preferences
   http://cwiki.apache.org/confluence/users/viewnotifications.action

If you think it was sent incorrectly contact one of the administrators
   http://cwiki.apache.org/confluence/administrators.action

If you want more information on Confluence, or have a bug to report see
   http://www.atlassian.com/software/confluence



Mime
View raw message