First of all apologies if this has been posted before or its in the wrong place. I have had a good trawl through these forums but cant seem to solve it.
INFO: EclipseLink, version: Eclipse Persistence Services - 2.3.0.v20110604-r9504
INFO: Running GlassFish Version: GlassFish Server Open Source Edition 3.1.1 (build 12)
Here is my scenario
@Entity
public class ObjectA{
/.......... other code ........./
private Integer subvalueid;
private String textvalue;
@OneToOne(optional=true,fetch=FetchType.EAGER)
@JoinColumn(name="subvalueid",unique=true,nullable=false,updatable=false,insertable=false)
private ObjectB subvalue;
}
@Entity
public class ObjectB{
/.......... other code ........./
private Integer id;
private String description;
}
Query query = entityManager.createQuery("SELECT A FROM ObjectA a WHERE a.textvalue = :val1 OR a.subvalue.description = :val2");
query.setHint(QueryHints.LEFT_FETCH, "a.subvalue");
query.setParameter("val1", "/..something ../");
query.setParameter("val2", "/..something ../");
query.getResultList();
My query produces
SELECT /*lots of fields*/ FROM ObjectA a, ObjectB b WHERE ((a.textvalue = ? OR (b.description) = ?) AND (b.ID = a.subvalueid))
b.ID = a.subvalueid means that only records where there is a match between the relationship are returned.
I want to try and enforce the query to produce a LEFT JOIN so that it includes records in table / ObjectA even if there is no entry in table / ObjectB
I have tried allsorts of QueryHints and JOIN FETCH on the query but am having no such look.
Any help is greatly appreciated.
Many thanks in advance
Jonathan Jones