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) > > > >> > > > > > > > > > > > > > >