[hibernate-dev] Why does implicit join translate to inner join?

Lukas Eder lukas.eder at gmail.com
Thu Feb 22 10:10:58 EST 2018

Hi Steve,

Thanks for your message. Of course, being explicit always has the advantage
of ... being explicit. But my question here is really about the implicit
join feature and how it works.

2018-02-22 15:57 GMT+01:00 Steve Ebersole <steve at hibernate.org>:

> it is better to be consistent in how implicit joins are handled.  It is
> far easier to impart to users that "implicit inner joins are always inner
> joins" as opposed to "well implicit joins are interpreted relative to the
> association being joined"

I don't disagree at all. In my opinion, the ideal approach would be
"implicit joins are always outer joins"

> Not to mention, adjusting the type of SQL join used for implicit jois
> means I can no longer just look at the query and know what is happening in
> terms of SQL joins - which is bad.

Why not? There's just an additional keyword between the generated tables:
LEFT (or if you will, LEFT OUTER).

> Not to mention, IMO interpreting these as inner joins is more OO-ish.

I'm curious about that, would you mind elaborating?

And what's your opinion on the Stream analogy, where the current behaviour
(implicit joins from the context of a SELECT clause) corresponds to
Stream.map() potentially applying filters?

More information about the hibernate-dev mailing list