The setup was as follows:

final Query query = getJdoPersistenceManager().newQuery(Employee.class);
query.setResult("this, p");
query.setResultClass(EmployeePayslipTemplate.class);
query.setFilter("ept.employee == this && ept.payslipTemplate == p");
query.declareVariables("domain.EmployeePayslipTemplate ept;
domain.PayslipTemplate p");
query.addExtension("datanucleus.query.jdoql.ept.join", "LEFTOUTERJOIN");
query.addExtension("datanucleus.query.jdoql.p.join", "LEFTOUTERJOIN");
return (List<EmployeePayslipTemplateView>) query.execute();


Domain objects:
* Employee
* EmployeePayslipTemplate
    - Employee employee
    - PayslipTemplate payslipTemplate
* PayslipTemplate

View model:
* EmployeePayslipTemplateView
    - public EmployeePayslipTemplateView(Employee employee, PayslipTemplate
payslipTemplate) { ... }
    - Employee employee
    - PayslipTemplate payslipTemplate

On Fri, Jan 29, 2016 at 1:22 AM, Dan Haywood <d...@haywood-associates.co.uk>
wrote:

> Could you copy all the relevant code so that I can write this up as an faq
> ?
> On 28 Jan 2016 17:17, "Willie Loyd Tandingan" <tandingan....@gmail.com>
> wrote:
>
> > It worked! "datanucleus.query.jdoql.{varName}.join" had to be set to
> > OUTERJOIN for both pt and t. Thanks!
> >
> > On Sun, Jan 24, 2016 at 2:45 AM, Willie Loyd Tandingan <
> > tandingan....@gmail.com> wrote:
> >
> > > I'm gonna try that one back at work next week. Thanks!
> > >
> > > Admittedly, I thought of that one before but didn't try it out since I
> > > thought it would generate an inner join instead and didn't think of
> > turning
> > > SQL logging on. We tried this erroneous funny query which we thought
> was
> > > kind of correct but DN didn't accept anyway:
> > >
> > > SELECT this, IF (pt.person == this) THEN pt.template ELSE null FROM
> > Person
> > > p VARIABLES PersonTemplate pt
> > >
> > > I will have to read thoroughly the DN documentation again.
> > >
> > > On Sat, Jan 23, 2016 at 3:36 AM, Andy Jefferson <a...@datanucleus.org>
> > > wrote:
> > >
> > >> On Friday 22 Jan 2016 19:25:24 Andy Jefferson wrote:
> > >> > > > SELECT p.*, t.* FROM Person p
> > >> > > > LEFT JOIN PersonTemplate pt ON p.id = pt.personId
> > >> > > > LEFT JOIN Template t ON pt.templateId = t.id
> > >> > > >
> > >> > > > With this query, I can get Persons even if they don't have a
> > >> Template.
> > >> > > Which is what you would do if you followed the example I
> suggested,
> > >> using JDOQL variables.
> > >> > >
> > >> > > SELECT p, t FROM mydomain.Person WHERE pt.person == this && pt.t
> ==
> > t
> > >> > > VARIABLES mydomain.PersonTemplate pt, mydomain.Template t
> > >> >
> > >> > That should be
> > >> >
> > >> > SELECT p, t FROM mydomain.Person WHERE pt.person == this &&
> > pt.template
> > >> == t
> > >> > VARIABLES mydomain.PersonTemplate pt, mydomain.Template t
> > >>
> > >>
> > >> Duh, and fixing the Person alias also that should be
> > >>
> > >> SELECT this, t FROM mydomain.Person WHERE pt.person == this &&
> > >> pt.template == t
> > >> VARIABLES mydomain.PersonTemplate pt, mydomain.Template t
> > >>
> > >>
> > >> but then its simple if you just try it.
> > >>
> > >>
> > >> --
> > >> Andy
> > >> DataNucleus (Web: http://www.datanucleus.org   Twitter: @datanucleus)
> > >>
> > >
> > >
> >
>

Reply via email to