Skip to main content
summaryrefslogtreecommitdiffstats
blob: a25b6a340a781a7f5e8d586a05a37ac65434758e (plain) (blame)
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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<!-- Run date = January 22, 2008 9:11:19 -->
<meta name="OAC_IGNORE_SKIP_NAV" content="true" />
<title>Many-to-many mapping</title>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<meta name="generator" content="Oracle DARB XHTML Converter (Mode = ohj/ohw) - Version 5.0" />
<meta name="date" content="2005-07-10T12:57:20+08:00" />
<meta name="robots" content="noarchive" />
<meta name="doctitle" content="Many-to-many mapping" />
<meta name="relnum" content="M5 - Release 2.0.0" />
<meta name="partnum" content="" />
<link rel="copyright" href="dcommon/html/cpyr.htm" title="Copyright" type="text/html" />
<link rel="stylesheet" href="dcommon/css/blafdoc.css" title="Oracle BLAFDoc" type="text/css" />
<link rel="start" href="../../index.htm" title="Home" type="text/html" />
<link rel="contents" href="toc.htm" title="Contents" type="text/html" />
</head>
<body>
<p><a id="BABEIEGD" name="BABEIEGD"></a></p>
<div class="sect2"><!-- infolevel="all" infotype="General" -->
<h1>Many-to-many mapping</h1>
<p><a id="sthref130" name="sthref130"></a><a id="sthref131" name="sthref131"></a><a id="sthref132" name="sthref132"></a><a id="sthref133" name="sthref133"></a>Use a <span class="bold">Many-to-Many Mapping</span> to define a many-valued association with many-to-many multiplicity. A many-to-many mapping has two sides: the <span class="italic">owning side</span> and <span class="italic">non-owning side</span>. You must specify the join table on the owning side. For bidirectional mappings, either side may be the owning side.</p>
<ol start="1">
<li>
<p>In the <a href="ref_persistence_outline.htm#BABEGGFE">JPA Structure view</a>, select the field to map. The <a href="ref_persistence_map_view.htm#BABIFBAF">JPA Details view (for attributes)</a> displays the properties for the selected.</p>
</li>
<li>
<p>In the <span class="gui-object-title">Map As</span> field, select <span class="gui-object-action">Many-to-Many</span>.</p>
</li>
<li>
<p>Use this table to complete the <a href="ref_mapping_general.htm#CACBHFIJ">General information</a> fields of the <span class="gui-object-title">JPA Details</span> view.</p>
<div class="inftblruleinformal">
<table class="RuleInformal" title="This table lists the fields in the Persistence Properties view for this mapping." summary="This table lists the fields in the Persistence Properties view for this mapping." dir="ltr" border="1" width="100%" frame="border" rules="all" cellpadding="3" cellspacing="0">
<thead>
<tr align="left" valign="top">
<th align="left" valign="bottom" id="r1c1-t9">Property</th>
<th align="left" valign="bottom" id="r1c2-t9">Description</th>
<th align="left" valign="bottom" id="r1c3-t9">Default</th>
</tr>
</thead>
<tbody>
<tr align="left" valign="top">
<td align="left" id="r2c1-t9" headers="r1c1-t9">Map As</td>
<td align="left" headers="r2c1-t9 r1c2-t9">Defines this mapping as a <span class="bold">Many to Many Mapping</span>.
<p>This field corresponds to the <code>@ManyToMany</code> annotation.</p>
</td>
<td align="left" headers="r2c1-t9 r1c3-t9">Many to Many</td>
</tr>
<tr align="left" valign="top">
<td align="left" id="r3c1-t9" headers="r1c1-t9">Target Entity</td>
<td align="left" headers="r3c1-t9 r1c2-t9">The entity to which this attribute is mapped.</td>
<td align="left" headers="r3c1-t9 r1c3-t9">null
<p>You do not need to explicitly specify the target entity, since it can be inferred from the type of object being referenced.</p>
</td>
</tr>
<tr align="left" valign="top">
<td align="left" id="r4c1-t9" headers="r1c1-t9">Fetch</td>
<td align="left" headers="r4c1-t9 r1c2-t9">Defines how data is loaded from the database. See <a href="ref_mapping_general.htm#CACGGGHB">"Fetch Type"</a> for details.
<ul>
<li>
<p>Eager</p>
</li>
<li>
<p>Lazy</p>
</li>
</ul>
</td>
<td align="left" headers="r4c1-t9 r1c3-t9">Lazy</td>
</tr>
<tr align="left" valign="top">
<td align="left" id="r5c1-t9" headers="r1c1-t9">Mapped By</td>
<td align="left" headers="r5c1-t9 r1c2-t9">The database field that owns the relationship.</td>
<td align="left" headers="r5c1-t9 r1c3-t9"><br /></td>
</tr>
<tr align="left" valign="top">
<td align="left" id="r6c1-t9" headers="r1c1-t9">Order By</td>
<td align="left" headers="r6c1-t9 r1c2-t9">Specify the default order for objects returned from a query. See <a href="ref_mapping_general.htm#CACDADIH">"Order By"</a> for details.
<ul>
<li>
<p>No ordering</p>
</li>
<li>
<p>Primary key</p>
</li>
<li>
<p>Custom</p>
</li>
</ul>
</td>
<td align="left" headers="r6c1-t9 r1c3-t9">No ordering</td>
</tr>
</tbody>
</table>
<br /></div>
<!-- class="inftblruleinformal" --></li>
<li>
<p>Use this table to complete the fields in the <a href="reference007.htm#CACBAEBC">Join Table Information</a> area in the <span class="gui-object-title">JPA Details</span> view.</p>
<div class="inftblruleinformal">
<table class="RuleInformal" title="This table lists the fields in the Join Table tab of the Persistence Properties view for this mapping." summary="This table lists the fields in the Join Table tab of the Persistence Properties view for this mapping." dir="ltr" border="1" width="100%" frame="border" rules="all" cellpadding="3" cellspacing="0">
<thead>
<tr align="left" valign="top">
<th align="left" valign="bottom" id="r1c1-t10">Property</th>
<th align="left" valign="bottom" id="r1c2-t10">Description</th>
<th align="left" valign="bottom" id="r1c3-t10">Default</th>
</tr>
</thead>
<tbody>
<tr align="left" valign="top">
<td align="left" id="r2c1-t10" headers="r1c1-t10">Name</td>
<td align="left" headers="r2c1-t10 r1c2-t10">Name of the join table that contains the foreign key column.</td>
<td align="left" headers="r2c1-t10 r1c3-t10">You must specify the join table on the owning side.
<p>By default, the name is assumed to be the primary tables associated with the entities concatenated with an underscore.</p>
</td>
</tr>
<tr align="left" valign="top">
<td align="left" id="r3c1-t10" headers="r1c1-t10">Join Columns</td>
<td align="left" headers="r3c1-t10 r1c2-t10">Select <span class="bold">Override Default</span>, then Add, Edit, or Remove the join columns.</td>
<td align="left" headers="r3c1-t10 r1c3-t10">By default, the name is assumed to be the primary tables associated with the entities concatenated with an underscore.</td>
</tr>
<tr align="left" valign="top">
<td align="left" id="r4c1-t10" headers="r1c1-t10">Inverse Join Columns</td>
<td align="left" headers="r4c1-t10 r1c2-t10">Select <span class="bold">Override Default</span>, then Add, Edit, or Remove the join columns.</td>
<td align="left" headers="r4c1-t10 r1c3-t10">By default, the mapping is assumed to have a single join.</td>
</tr>
</tbody>
</table>
<br /></div>
<!-- class="inftblruleinformal" --></li>
<li>
<p>To add a new Join or Inverse Join Column, click <span class="gui-object-action">Add</span>.</p>
<p>To edit an existing Join or Inverse Join Column, select the field to and click <span class="gui-object-action">Edit</span>.</p>
</li>
</ol>
<p>Eclipse adds the following annotations to the field:</p>
<pre xml:space="preserve" class="oac_no_warn">
@JoinTable(joinColumns=@JoinColumn(name="<span class="italic">&lt;JOIN_COLUMN&gt;</span>"), 
    name = "<span class="italic">&lt;JOIN_TABLE_NAME&gt;</span>")
@ManyToMany(cascade=CascadeType.<span class="italic">&lt;CASCADE_TYPE&gt;</span>, fetch=FetchType.<span class="italic">&lt;FETCH_TYPE&gt;</span>,
    targetEntity=<span class="italic">&lt;TARGET_ENTITY&gt;</span>, mappedBy = "<span class="italic">&lt;MAPPED_BY&gt;</span>")
@OrderBy("<span class="italic">&lt;ORDER_BY&gt;</span>")

</pre>
<p>&nbsp;</p>
<img src="img/ngrelt.png" alt="Related task" title="Related task" /><br />
<br />
<a href="task_mapping.htm#BABDGBIJ">Mapping an entity</a>
<p>&nbsp;</p>
<img src="img/ngrelr.png" alt="Related reference" title="Related reference" /><br />
<br />
<a href="ref_persistence_outline.htm#BABEGGFE">JPA Structure view</a><br />
<a href="ref_persistence_map_view.htm#BABIFBAF">JPA Details view (for attributes)</a>
<p>&nbsp;</p>
<img src="img/ngrelc.png" alt="Related concept" title="Related concept" /><br />
<br />
<a href="concept_mapping.htm#BABBDJFI">Understanding OR mappings</a><br />
<a href="concepts001.htm#BABBGFJG">Understanding EJB 3.0 Java Persistence API</a></div>
<!-- class="sect2" -->
<!-- Start Footer -->
<div class="footer">
<table class="simple oac_no_warn" summary="" cellspacing="0" cellpadding="0" width="100%">
<tr>
<td align="left" width="86%"><a href="dcommon/html/cpyr.htm"><span class="copyrightlogo">Copyright&nbsp;&copy;&nbsp;2006, 2008,&nbsp;Oracle.&nbsp;All&nbsp;rights&nbsp;reserved.</span></a></td>
</tr>
</table>
</div>
<!-- class="footer" -->
</body>
</html>

Back to the top