<style>
/* Changing the layout to use less space for mobiles */
@media screen and (max-device-width: 480px), screen and (-webkit-min-device-pixel-ratio: 2) {
#email-body { min-width: 30em !important; }
#email-page { padding: 8px !important; }
#email-banner { padding: 8px 8px 0 8px !important; }
#email-avatar { margin: 1px 8px 8px 0 !important; padding: 0 !important; }
#email-fields { padding: 0 8px 8px 8px !important; }
#email-gutter { width: 0 !important; }
}
</style>
<div id="email-body">
<table id="email-wrap" align="center" border="0" cellpadding="0" cellspacing="0" style="background-color:#f0f0f0;color:#000000;width:100%;">
<tr valign="top">
<td id="email-page" style="padding:16px !important;">
<table align="center" border="0" cellpadding="0" cellspacing="0" style="background-color:#ffffff;border:1px solid #bbbbbb;color:#000000;width:100%;">
<tr valign="top">
<td bgcolor="#3e4c4e" style="background-color:#3e4c4e;color:#ffffff;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;line-height:1;"><img src="https://www.jboss.org/dms/hibernate/images/jira/jiraheader_hibernate.png" alt="" style="vertical-align:top;" /></td>
</tr><tr valign="top">
<td id="email-banner" style="padding:32px 32px 0 32px;">
<table align="left" border="0" cellpadding="0" cellspacing="0" width="100%" style="width:100%;">
<tr valign="top">
<td style="color:#505050;font-family:Arial,FreeSans,Helvetica,sans-serif;padding:0;">
<img id="email-avatar" src="https://hibernate.onjira.com/secure/useravatar?avatarId=10162" alt="" height="48" width="48" border="0" align="left" style="padding:0;margin: 0 16px 16px 0;" />
<div id="email-action" style="padding: 0 0 8px 0;font-size:12px;line-height:18px;">
<a class="user-hover" rel="alvint" id="email_alvint" href="https://hibernate.onjira.com/secure/ViewProfile.jspa?name=alvint" style="color:#6c797f;">Alvin Thompson</a>
created <img src="https://hibernate.onjira.com/images/icons/bug.gif" height="16" width="16" border="0" align="absmiddle" alt="Bug"> <a style='color:#6c797f;text-decoration:none;' href='https://hibernate.onjira.com/browse/HHH-8054'>HHH-8054</a>
</div>
<div id="email-summary" style="font-size:16px;line-height:20px;padding:2px 0 16px 0;">
<a style='color:#6c797f;text-decoration:none;' href='https://hibernate.onjira.com/browse/HHH-8054'><strong>hibernate incorrectly assumes there is no reason to use the "mappedBy" attribute if a @JoinTable is specified</strong></a>
</div>
</td>
</tr>
</table>
</td>
</tr>
<tr valign="top">
<td id="email-fields" style="padding:0 32px 32px 32px;">
<table border="0" cellpadding="0" cellspacing="0" style="padding:0;text-align:left;width:100%;" width="100%">
<tr valign="top">
<td id="email-gutter" style="width:64px;white-space:nowrap;"></td>
<td>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr valign="top">
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
<strong style="font-weight:normal;color:#505050;">Issue Type:</strong>
</td>
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
<img src="https://hibernate.onjira.com/images/icons/bug.gif" height="16" width="16" border="0" align="absmiddle" alt="Bug"> Bug
</td>
</tr> <tr valign="top">
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
<strong style="font-weight:normal;color:#505050;">Assignee:</strong>
</td>
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
Unassigned </td>
</tr> <tr valign="top">
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
<strong style="font-weight:normal;color:#505050;">Components:</strong>
</td>
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
annotations, entity-manager </td>
</tr>
<tr valign="top">
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
<strong style="font-weight:normal;color:#505050;">Created:</strong>
</td>
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
05/Mar/13 5:21 PM
</td>
</tr> <tr valign="top">
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
<strong style="font-weight:normal;color:#505050;">Description:</strong>
</td>
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
<p style='margin-top:0;margin-bottom:10px;'>Short version: it's in the spec so you have to allow and implement it. Long version:</p>
<p style='margin-top:0;margin-bottom:10px;'>Say you have a LOCATION table as follows ("*" = PK;"+" = required):</p>
<ul class="alternate" type="square">
        <li>id*</li>
        <li>name+<br/>
...</li>
</ul>
<p style='margin-top:0;margin-bottom:10px;'>Since a Location can have multiple "parent" locations, you have a relation table LOCATION_PARENT:</p>
<ul class="alternate" type="square">
        <li>location_id*</li>
        <li>parent_location_id*</li>
</ul>
<p style='margin-top:0;margin-bottom:10px;'>Your entity class would start out as this:</p>
<p style='margin-top:0;margin-bottom:10px;'>@Entity<br/>
public class Location ... {</p>
<p style='margin-top:0;margin-bottom:10px;'> private String name;</p>
<p style='margin-top:0;margin-bottom:10px;'> @ManyToMany<br/>
@JoinTable(<br/>
name = "LOCATION_PARENT",<br/>
joinColumns = { @JoinColumn(name = "LOCATION_ID") },<br/>
inverseJoinColumns = { @JoinColumn(name = "PARENT_LOCATION_ID") }<br/>
)<br/>
private Set<Location> parentLocations;<br/>
<br/>
...<br/>
}<br/>
<br/>
So far so good. But what if you also want to include a Set of child Locations? You obviously don't need another join table--you can reuse the old one. Your class becomes this:<br/>
<br/>
@Entity<br/>
public class Location ... {<br/>
<br/>
private String name;<br/>
<br/>
@ManyToMany<br/>
@JoinTable(<br/>
name = "LOCATION_PARENT",<br/>
joinColumns = { @JoinColumn(name = "LOCATION_ID") },<br/>
inverseJoinColumns = { @JoinColumn(name = "PARENT_LOCATION_ID") }<br/>
)<br/>
private Set<Location> parentLocations;<br/>
<br/>
@ManyToMany<br/>
@JoinTable(<br/>
name = "LOCATION_PARENT",<br/>
joinColumns = { @JoinColumn(name = "PARENT_LOCATION_ID") },<br/>
inverseJoinColumns = { @JoinColumn(name = "LOCATION_ID") }<br/>
)<br/>
private Set<Location> childLocations;<br/>
<br/>
...<br/>
}<br/>
<br/>
This is perfectly valid and works, but there is one problem: when you insert new entities, hibernate/eclipselink/everyone attempts (correctly) to insert two entries into the LOCATION_PARENT table (one for each field). The insert fails because of this. The way you tell the persistence manager NOT to add an entry for one of the fields is by delegating responsibility to the other field with the "mappedBy" attribute:<br/>
<br/>
@ManyToMany(mappedBy = "parentLocations")<br/>
@JoinTable(<br/>
name = "LOCATION_PARENT",<br/>
joinColumns = { @JoinColumn(name = "PARENT_LOCATION_ID") },<br/>
inverseJoinColumns = { @JoinColumn(name = "LOCATION_ID") }<br/>
)<br/>
private Set<Location> childLocations;</p>
<p style='margin-top:0;margin-bottom:10px;'>This works everywhere but in Hibernate. Hibernate gives this "I know better than you what you're doing" error:</p>
<p style='margin-top:0;margin-bottom:10px;'>org.hibernate.AnnotationException: Associations marked as mappedBy must not define database mappings like @JoinTable or @JoinColumn: com.ijet.cwt.domain.Location.childLocations</p>
<p style='margin-top:0;margin-bottom:10px;'>Thank you.</p>
</td>
</tr>
<tr valign="top">
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
<strong style="font-weight:normal;color:#505050;">Environment:</strong>
</td>
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
jboss AS 7 (hibernate 4.0.1?); oracle 11g; jdk 6
</td>
</tr>
<tr valign="top">
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
<strong style="font-weight:normal;color:#505050;">Project:</strong>
</td>
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
<a style="color:#6c797f;" href="https://hibernate.onjira.com/browse/HHH">Hibernate ORM</a>
</td>
</tr> <tr valign="top">
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
<strong style="font-weight:normal;color:#505050;">Labels:</strong>
</td>
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
jpa2
</td>
</tr>
<tr valign="top">
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
<strong style="font-weight:normal;color:#505050;">Priority:</strong>
</td>
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
<img src="https://hibernate.onjira.com/images/icons/priority_critical.gif" height="16" width="16" border="0" align="absmiddle" alt="Critical"> Critical
</td>
</tr> <tr valign="top">
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 10px 10px 0;white-space:nowrap;">
<strong style="font-weight:normal;color:#505050;">Reporter:</strong>
</td>
<td style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 10px 0;width:100%;">
<a class="user-hover" rel="alvint" id="email_alvint" href="https://hibernate.onjira.com/secure/ViewProfile.jspa?name=alvint" style="color:#6c797f;">Alvin Thompson</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td><!-- End #email-page -->
</tr>
<tr valign="top">
<td style="color:#505050;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:10px;line-height:14px;padding: 0 16px 16px 16px;text-align:center;">
This message is automatically generated by JIRA.<br />
If you think it was sent incorrectly, please contact your JIRA administrators<br />
For more information on JIRA, see: <a style='color:#6c797f;' href='http://www.atlassian.com/software/jira'>http://www.atlassian.com/software/jira</a>
</td>
</tr>
</table><!-- End #email-wrap -->
</div><!-- End #email-body -->