Hi Danilo, I'm currently trying to do the same thing than you, that is, if I understood it right, define a whole entity graph, and fetch it in one call to make a JSON payload.
What I've done for now is: - extend the JavaGenerator to generate properties (i.e field/getter/setter) in generated records (or POJOs) based on foreign keys - write code to fetch records from a table and its "children" tables, and then associate children records to their parent (that is create a graph) using generated setters - write code to insert/update/merge/delete a graph of record objects, copying foreign key values from parent to children when needed For fetching it's a lot less than what a MULTISET can offer I guess, but the idea was to have write capabilities too (so you can insert/update a graph right from deserialized JSON). And for now I only handles one-to-one and one-to-many relationships. Posting it in case it can help you to keep using jOOQ, until Lukas provide us with a great beautiful MULTISET API and emulation ;) Open to discussion if interested in more details. Thomas On Sunday, September 25, 2016 at 9:10:30 PM UTC+2, Danilo Cominotti Marques wrote: > > Hello Lukas! > > First of all, congratulations (and thanks!) for your great work on JOOQ. > > One thing that would be a killer feature for many of the projects I have > been working on would be the ability to automatically retrieve/fetch and > nest/embed foreign entities (which have 1-N, N-1 or N-N relationships) in > Records and POJOs, similarly to what PostgREST does with Postgres ( > http://postgrest.com/api/reading/#embedding-foreign-entities) when it > returns JSON data for queries. > > E.g.: table "sessions" references table "speakers", and a SessionsRecord > for an existing Sessions row would be able to fetch SpeakersRecords for > every referenced Speakers row. Better yet, it could return a whole POJO > graph after a single method/fetch invocation. > > In order to see a working and somewhat equivalent example, just access the > following URL in your web browser > > > https://postgrest.herokuapp.com/sessions > > > and then compare the returned JSON to the one from this other URL > > > https://postgrest.herokuapp.com/sessions?select=*,speaker{*} > > > In fact, we are evaluating the use of PostgREST as a substitute for ORMs > and even JOOQ in some use cases mainly because of this feature. > > Thanks for your support! > > Danilo > > > > On Wednesday, July 6, 2016 at 9:16:44 AM UTC-3, Lukas Eder wrote: >> >> Dear group, >> >> Part of jOOQ's success is its incredible amount of convenience methods >> that help reduce the boiler plate code at your side. We do this with >> massive overloading of API, for instance, when you work with fetch(), you >> may have noticed how many different types of fetch() there are in jOOQ. >> >> Just now, I have added yet another convenience method. A Converter >> constructor: >> https://github.com/jOOQ/jOOQ/issues/5398 >> >> It looks like this: >> >> static <T, U> Converter<T, U> of( >> Class<T> fromType, >> Class<U> toType, >> Function<? super T, ? extends U> from, >> Function<? super U, ? extends T> to >> ) { ... } >> >> And also: >> >> static <T, U> Converter<T, U> ofNullable( >> Class<T> fromType, >> Class<U> toType, >> Function<? super T, ? extends U> from, >> Function<? super U, ? extends T> to >> ) { >> return of( >> fromType, >> toType, >> t -> t == null ? null : from.apply(t), >> u -> u == null ? null : to.apply(u) >> ); >> } >> >> >> The above allows for creating simple ad-hoc, one-liner converters, such >> as: >> >> Converter<String, Integer> converter = >> Converter.ofNullable(String.class, Integer.class, Integer::parseInt, >> Object::toString); >> >> What's your biggest "itch" in the jOOQ API, which jOOQ could "scratch", >> or rather, make go away by adding new convenience API? >> >> All ideas welcome! >> 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 [email protected]. For more options, visit https://groups.google.com/d/optout.
