<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="emundo" id="email_emundo" href="https://hibernate.onjira.com/secure/ViewProfile.jspa?name=emundo" style="color:#6c797f;">eMundo GmbH</a>
commented on <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-7707'>HHH-7707</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-7707'><strong>Described Implicit Join generates "CROSS JOIN" instead of "INNER JOIN"</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 colspan="2" style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 16px 0;width:100%;">
<div class="comment-block" style="background-color:#edf5ff;border:1px solid #dddddd;color:#000000;padding:12px;"><p>Corrected Format...</p>
<p>We have the following Entities defined:</p>
<div class="code panel" style="border-style: solid;border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;"><b>Table1.java</b></div><div class="codeContent panelContent">
<pre class="code-java">@Entity
@Table(name = <span class="code-quote">"table1"</span>)
<span class="code-keyword">public</span> class Table1 <span class="code-keyword">implements</span> VersionSupport, Persistable<<span class="code-object">Integer</span>>
{ @Id @GeneratedValue(strategy = GenerationType.AUTO) @Basic(optional = <span class="code-keyword">false</span>) @Column(name = <span class="code-quote">"table1_id"</span>, nullable = <span class="code-keyword">false</span>) <span class="code-keyword">private</span> <span class="code-object">Integer</span> table1Id; @Basic(optional = <span class="code-keyword">true</span>) @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = <span class="code-quote">"table2_refid"</span>) <span class="code-keyword">private</span> Table2 table2; }</pre>
</div></div>
<div class="code panel" style="border-style: solid;border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;"><b>Table2.java</b></div><div class="codeContent panelContent">
<pre class="code-java">@Entity
@Table(name = <span class="code-quote">"table2"</span>)
@Indexed
<span class="code-keyword">public</span> class Table2 <span class="code-keyword">implements</span> Persistable<<span class="code-object">Integer</span>>, Auditable, VersionSupport
{ @Id @GeneratedValue @DocumentId @Column(name = <span class="code-quote">"table2_id"</span>, nullable = <span class="code-keyword">false</span>) <span class="code-keyword">private</span> <span class="code-object">Integer</span> table2Id; @Field @Column(name = <span class="code-quote">"matchcode"</span>, nullable = <span class="code-keyword">false</span>) <span class="code-keyword">private</span> <span class="code-object">String</span> matchcode; }</pre>
</div></div>
<p>(shortend of course)</p>
<p>If I try to do a HQL-Query like the following, I get a "CROSS JOIN" instead of a "INNER JOIN":</p>
<div class="code panel" style="border-style: solid;border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;"><b>Fetch implicit</b></div><div class="codeContent panelContent">
<pre class="code-java">StringBuilder sb = <span class="code-keyword">new</span> StringBuilder();
sb.append(<span class="code-quote">"from Table1 where table2.matchcode = :refid"</span>);
Query query = sessionFactory.getCurrentSession().createQuery(sb.toString());
query.setInteger(<span class="code-quote">"refid"</span>, value);
List<Table1> table1List = (List<Table1>) query.list();
<span class="code-keyword">return</span> table1List;
}</pre>
</div></div>
<p>HQL then generates me the following sql:</p>
<div class="code panel" style="border-style: solid;border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;"><b>CROSS JOIN</b></div><div class="codeContent panelContent">
<pre class="code-java">select ...
from Table1 t1 CROSS JOIN Table2 t2
where t1.table2_id = t2.id
and matchcode = ...</pre>
</div></div>
<p>instead of</p>
<div class="code panel" style="border-style: solid;border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;"><b>INNER JOIN</b></div><div class="codeContent panelContent">
<pre class="code-java">select ...
from Table1 t1 INNER JOIN Table2 t2 on t1.table2_id = t2.id
where matchcode = ...</pre>
</div></div>
<p>which I will get if I do a explicit join:</p>
<div class="code panel" style="border-style: solid;border-width: 1px;"><div class="codeHeader panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;"><b>Fetch explicit</b></div><div class="codeContent panelContent">
<pre class="code-java">StringBuilder sb = <span class="code-keyword">new</span> StringBuilder();
sb.append(<span class="code-quote">"from Table1 t1 join t1.table2Id where table2.matchcode = :refid"</span>);
Query query = sessionFactory.getCurrentSession().createQuery(sb.toString());
query.setInteger(<span class="code-quote">"refid"</span>, value);
List<Table1> table1List = (List<Table1>) query.list();
<span class="code-keyword">return</span> table1List;
}</pre>
</div></div>
<p>That happens although documentation tells me in different way:<br/>
<a href="http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/queryhql.html#queryhql-joins-forms">http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/queryhql.html#queryhql-joins-forms</a></p>
<blockquote><p>HQL supports two forms of association joining: implicit and explicit.<br/>
The queries shown in the previous section all use the explicit form, that is, where the join keyword is explicitly used in the from clause. This is the recommended form.<br/>
The implicit form does not use the join keyword. Instead, the associations are "dereferenced" using dot-notation. implicit joins can appear in any of the HQL clauses. implicit join result in inner joins in the resulting SQL statement.<br/>
from Cat as cat where cat.mate.name like '%s%'</p></blockquote>
<p>Who can help me in this case? I don't want to get ANY CROSS JOIN in my Program. In this case I have mapped my refid as nullable as it has to be filled later on in my program. But at the time I create this object it is nullable as I do not have this Object.</p>
<p>Either way -> I turned it to not null and it happened again...</p></div>
<div style="color:#505050;padding:4px 0 0 0;"> </div>
</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 -->