There is a class Offer
that has optional relationship to class Article
. So that some offers article property holds a null
value.
If i use the following statement, everything works fine. I got all offers, even those that have no article.
SELECT o FROM Offer o
LEFT OUTER JOIN o.article a
LEFT OUTER JOIN o.vendor v
WHERE v.number = '0212' OR a.nummer = '123456'
If i change the statement to:
SELECT o FROM Offer o
LEFT OUTER JOIN o.article a
LEFT OUTER JOIN o.vendor v
WHERE v.number = '0212' OR o.article.nummer = '123456'
I got only these offers having articles different from NULL
. That is because the notation for implicit joins (o.article.nummer
) forces an inner join.
Is there a possibility to force left outer joins to implicit joins (annotation driven or something else)? If there is a chance i could use a short form like this:
SELECT o FROM Offer o
WHERE v.number = '0212' OR o.article.nummer = '123456'
You can try putting @Fetch(FetchMode.JOIN)
on the Article property. This is a Hibernate annotation, however.
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
//...
@ManyToOne
@Fetch(FetchMode.JOIN)
Article article;