 <p>Solution is to ditch the join table and have a direct reference between Test &lt;> Team. </p> <p>The SQL you are seeing makes sense as Hibernate cannot know that TestTeam will be the same entity referenced by Test and Team.</p> <pre><code>Test test = .../ test.getTestTeam();//triggers load **where test_id = test.id** Team team = test.getTestTeam().getTeam(); team.getTestTeam();// triggers load **where team_id = team.id** </code></pre>