Comment inline... 2017-03-28 20:36 GMT+02:00 Rob Sargent <robjsarg...@gmail.com>:
> Thank you again, all of these work: > > Map<String, PersonRecord> fullMap = new HashMap<>(); > fullMap.putAll(ctx.select(PERSON.fields()) > .from(PERSON.join(ALIAS) > .on(PERSON.ID.equal(ALIAS.PERSON_ID))) > .where(ALIAS.AKA.in(nameSet)) > .fetchMap(PERSON.NAME, r -> r.into(PERSON))); > > fullMap.putAll(ctx.select(PERSON.fields()) > .from(PERSON.join(ALIAS) > .on(PERSON.ID.equal(ALIAS.PERSON_ID) > .and(ALIAS.AKA.in(nameSet)))) > .fetchMap(PERSON.NAME, r -> r.into(PERSON))); > > fullMap.putAll(ctx.select(PERSON.fields()) > .from(PERSON.join(ALIAS) > .on(PERSON.ID.equal(ALIAS.PERSON_ID)) > .and(ALIAS.AKA.in(nameSet))) > .fetchMap(PERSON.NAME, r -> r.into(PERSON))); > > Is any more proper than the other? > The first one is what I'd choose here, because the WHERE predicate is semantically sligthly different from the ON predicate. Your ALIAS.AKA predicate is not stricly part of the JOIN specification, so I wouldn't put it there. For inner join, this is mostly just a stylistic debate (at least in most databases). For outer join, 1 would be a very different query from 2/3 (which is another reason why stylistically, you should put the predicates at the semantically right place). 2 and 3 are exactly the same thing. 2 is creating a Condition inside of ON, whereas 3 is using TableOnConditionStep convenience API (which internally does the same thing as 2 but leads to a bit less confusing parentheses). Note, you could also write this, and it would still be the same as 2 and 3, just using convenience API: fullMap.putAll(ctx.select(PERSON.fields()) .from(PERSON) .join(ALIAS) .on(PERSON.ID.equal(ALIAS.PERSON_ID)) .and(ALIAS.AKA.in <http://alias.aka.in/>(nameSet)) .fetchMap(PERSON.NAME <http://person.name/>, r -> r.into(PERSON))); > I had gotten side tracked thinking I needed to use a RecordMapper but > could never set that up properly. > Well, your lambda *is* a RecordMapper :) Just much more convenient syntax than an anonymous or "normal" class. Hope this helps, Lukas -- You received this message because you are subscribed to the Google Groups "jOOQ User Group" group. To unsubscribe from this group and stop receiving emails from it, send an email to jooq-user+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.