Very elegant, nice!

On 28 January 2016 at 18:55, Willie Loyd Tandingan <tandingan....@gmail.com>
wrote:

> 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