summaryrefslogtreecommitdiffstats
path: root/site/trunk/site-publish/rdb-das-cpp-workingwithrelationships.html
blob: 36f8bbe02c509656031a50c58dd5a9d57b5f5ead (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
<!--

    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to You under the Apache License, Version 2.0
    (the "License"); you may not use this file except in compliance with
    the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE- 2.0

    Unless required by applicable law or agreed to in writing, software
    distributed under the License is distributed on an "AS IS" BASIS,
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-->


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
    <HEAD>
		<!-- generateKeywords macro -->
	    <META name="description" content="Apache Tuscany">
        <META name="keywords" content="apache, apache tuscany, tuscany, service, services, fabric, soa, service oriented architecture,  sca, service component architecture, das, sdo, csa, ruby, opensource">
		<!-- generateKeywords macro end -->
		
        <LINK type="text/css" rel="stylesheet" href="http://tuscany.apache.org/stylesheets/default.css">
        <LINK rel="SHORTCUT ICON" href="https://cwiki.apache.org/confluence/display/TUSCANY/$images/favicon.ico">   
        <TITLE>Apache Tuscany : RDB DAS CPP - WorkingWithRelationships</TITLE>
    <META http-equiv="Content-Type" content="text/html;charset=UTF-8"></HEAD>
    
    <BODY onload="init()">
        <!-- topNav macro -->
		<TABLE valign="top" border="0" cellspacing="0" cellpadding="0" width="100%" background="http://tuscany.apache.org/images/TuscanyLogoNEW_Text_120px_bg.jpg">
			<TR>
				<TD valing="top" align="left">
					<A href="https://cwiki.apache.org/confluence/pages/viewpage.action?spaceKey=TUSCANY&title=$siteroot"><IMG src="http://tuscany.apache.org/images/TuscanyLogoNEW_Text_120px_bg.jpg" height="91" width="25" border="0"></A>
				</TD>
				<TD>
					<A href="http://tuscany.apache.org/"><IMG src="http://tuscany.apache.org/images/TuscanyLogo.jpg" border="0"></A>
				</TD>
				
				<TD width="100%">
					&nbsp;
				</TD>

				<!-- Adds the edit page link to the top banner-->
				<TD valign="bottom">
					<DIV style="padding: 2px 10px; margin: 0px;">
						<A href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=69485">
						<IMG src="http://tuscany.apache.org/images/notep_16.gif" height="16" width="16" border="0" align="absmiddle" title="Edit Page"></A>
					</DIV>
				</TD>

			</TR>
		</TABLE>
        <!-- topNav macro end -->

		<!-- breadCrumbs macro -->
		<TABLE border="0" cellpadding="2" cellspacing="0" width="100%">
			<TR class="topBar">
				<TD align="left" valign="middle" class="topBarDiv" nowrap="true" width="100%">
					&nbsp;<A href="home.html" title="Apache Tuscany">Apache Tuscany</A>&nbsp;&gt;&nbsp;<A href="home.html" title="Home">Home</A>&nbsp;&gt;&nbsp;<A href="das-overview.html" title="DAS Overview">DAS Overview</A>&nbsp;&gt;&nbsp;<A href="das-c.html" title="DAS C++">DAS C++</A>&nbsp;&gt;&nbsp;<A href="das-c-documentation-menu.html" title="DAS C++ Documentation Menu">DAS C++ Documentation Menu</A>&nbsp;&gt;&nbsp;<A href="rdb-das-c-user-guide.html" title="RDB DAS C++ - User Guide">RDB DAS C++ - User Guide</A>&nbsp;&gt;&nbsp;<A href="" title="RDB DAS CPP - WorkingWithRelationships">RDB DAS CPP - WorkingWithRelationships</A>
				</TD>
				
				<TD align="right" valign="middle" class="topBarDiv" align="left" nowrap="true">
				<A href="http://mail-archives.apache.org/mod_mbox/tuscany-user">User List</A> | <A href="http://mail-archives.apache.org/mod_mbox/tuscany-dev">Dev List</A> | <A href="http://issues.apache.org/jira/browse/Tuscany">Issue Tracker</A>&nbsp;&nbsp;
				</TD>
			</TR>
		</TABLE>
		<!-- breadCrumbs macro end -->


        <TABLE border="0" cellpadding="0" width="100%" bgcolor="#FFFFFF">
            <TR>
                <TD align="left" valign="top">

					<!-- pageContent macro -->
					<DIV id="PageContent">
												
						<DIV class="pagecontent">
							<DIV class="wiki-content">
								<H1><A name="RDBDASCPP-WorkingWithRelationships-WorkingWithRelationships"></A>WorkingWithRelationships</H1>

<P>As mentioned elsewhere in this guide, the RDB DAS provides a simple, implicit mapping from SDO Types/Properties to Relational Tables/Columns. So, in the absence of configuration to the otherwise, reading a table named CUSTOMER with columns NAME and ADDRESS will result in a data graph containing SDO DataObjects of Type CUSTOMER with properties NAME and ADDRESS.</P>

<P>This is great for reading entities from a single table but clients often need to read data from related tables for example Customers and their related Orders. The RDB DAS can work with related database tables and reads that span tables produce graphs of related data objects. Continuing with our Customer-&gt;Order example, a client can read a set of Customers and related Orders by using a SELECT statement that includes a join as in the following example:</P>
<DIV class="panel" style="border-width: 1px;"><DIV class="panelContent">
<P>DASImpl&#42; das = (DASImpl*) DASImpl::getFactory().createDAS(Config(&quot;CustomerOrderConfig.xml&quot;), getConnection());<BR>
 // Read some customers and related orders<BR>
CommandPtr select = das-&gt;createCommand(&quot;SELECT * FROM CUSTOMER LEFT JOIN ANORDER ON CUSTOMER.ID = ANORDER.CUSTOMER_ID WHERE CUSTOMER.ID = 1&quot;);</P>

<P> DataObjectPtr root = select-&gt;executeQuery();<BR>
 DataObjectPtr customer = root-&gt;getDataObject(&quot;CUSTOMER[1]&quot;);<BR>
 DataObjectList&amp; orders = customer-&gt;getList(&quot;ORDERS&quot;);</P>

<P>delete das;&nbsp;</P>
</DIV></DIV>
<P>You can see that the client can work with the data graph as a set of related objects. Once the application has a handle to a customer, it can reference that customers related orders by accessing the customers &quot;orders&quot; property.</P>

<P>Notice that the example provides a config file as part of creating the DAS. This file contains mapping information that defines to the DAS how the queried tables are related. Here are the contents of the config file:</P>
<DIV class="preformatted panel" style="border-width: 1px;"><DIV class="preformattedContent panelContent">
<PRE>&lt;Config xsi:noNamespaceSchemaLocation=&quot;http:///org.apache.tuscany.das.rdb/config.xsd&quot;&gt;

     &lt;Table tableName=&quot;CUSTOMER&quot;&gt;
        &lt;Column columnName=&quot;ID&quot; primaryKey=&quot;true&quot;/&gt;
     &lt;/Table&gt;

     &lt;Table tableName=&quot;ANORDER&quot;&gt;
        &lt;Column columnName=&quot;ID&quot; primaryKey=&quot;true&quot;/&gt;
     &lt;/Table&gt;

     &lt;Relationship name=&quot;orders&quot; primaryKeyTable=&quot;CUSTOMER&quot; foreignKeyTable=&quot;ANORDER&quot; many=&quot;true&quot;&gt;
        &lt;KeyPair primaryKeyColumn=&quot;ID&quot; foreignKeyColumn=&quot;CUSTOMER_ID&quot;/&gt;
     &lt;/Relationship&gt;

   &lt;/Config&gt;
</PRE>
</DIV></DIV>
<P>This config file specifies the primary keys of the related tables and then the relationship between them. It also provides a convenient name for the relationship. In short, this config specifies that the CUSTOMER table and ANORDER table are related via ANORDERs column named &quot;CUSTOMER_ID&quot; which references CUSTOMERS column named &quot;ID&quot;. The name of the relationship is &quot;orders&quot;</P>

<P>As a side note, the config in this example is not required since the table definitions follow a &quot;convention&quot; recognized by the DAS. See <A href="rdb-das-cpp-workingwithconventions.html" title="RDB DAS CPP - WorkingWithConventions">WorkingWithConventions</A>. </P>
							</DIV>
						</DIV>
					</DIV>	
		            <!-- pageContent macro end -->
					
                </TD>
            </TR>
        </TABLE>

		<!-- footer macro -->
				<SCRIPT src="http://www.google-analytics.com/urchin.js" type="text/javascript">
		</SCRIPT>
		<SCRIPT type="text/javascript">
		   _uacct = "UA-1174707-5";
		   urchinTracker();
		</SCRIPT>
		
				<A href="http://www.statcounter.com/" target="_blank"><IMG src="http://c26.statcounter.com/counter.php?sc_project=2619156&java=0&security=94bd7e7d&invisible=0" alt="website stats" border="0"></A>    

		<DIV class="footer">
			Copyright � 2003-2012, The Apache Software Foundation&nbsp;&nbsp;</BR>
                        Apache Tuscany and the Apache Tuscany project logo are trademarks of The Apache Software Foundation.
		</DIV>
		<!-- footer macro end -->

    </BODY>
</HTML>