How to implement inheritance with JOOQ

991 views
Skip to first unread message

andreas...@gmail.com

unread,
Mar 2, 2012, 10:35:33 AM3/2/12
to jooq...@googlegroups.com
Hi everyone!

I've tried googling but beside a thread about JOOQ and Postrgres (http://groups.google.com/group/jooq-user/browse_thread/thread/62e4e9f7ee4af5fb/9b5f90fc63e0e1a8) I didn't find a hint how someone would implement simple inheritance with JOOQ.
What I want to do is have a java class "Contact" which is the base class of "User". I know that there are at least 3 different ways to design your database for this kind of inheritance and I'm fine with any of them.
Is there a "JOOQ Way" to do this? Can I tell JOOQ somehow that the UsersRecord is actually extending the ContactsRecord?

I'm sorry if this all is very vague, but I'm really grateful for every reply.

Best regards
Andreas

Ps.: Whats the best way to submit a bug?

Lukas Eder

unread,
Mar 2, 2012, 11:39:32 AM3/2/12
to jooq...@googlegroups.com
Hi Andreas,

> I've tried googling but beside a thread about JOOQ and Postrgres
> (http://groups.google.com/group/jooq-user/browse_thread/thread/62e4e9f7ee4af5fb/9b5f90fc63e0e1a8)
> I didn't find a hint how someone would implement simple inheritance with
> JOOQ.

Yes, that thread was the only time that the "inheritance" subject came
up on this user group

> What I want to do is have a java class "Contact" which is the base class of
> "User". I know that there are at least 3 different ways to design your
> database for this kind of inheritance and I'm fine with any of them.
> Is there a "JOOQ Way" to do this? Can I tell JOOQ somehow that the
> UsersRecord is actually extending the ContactsRecord?

Inheritance has not been considered a true relational concept by most
databases (Postgres and to some extent Oracle being the only
exceptions I'm aware of). With Hibernate/JPA, there have been some
attempts of mapping Java's notion of inheritance to SQL's LEFT OUTER
JOIN clauses (i.e. if a Java User *IS* a Contact, then a SQL User can
be left outer joined to a SQL Contact).

The "jOOQ way" to do this would thus correspond to the "SQL way" to do
it. If you want to use object-oriented inheritance in client code, you
can still create a domain model that is independent of jOOQ, and use
the various ResultQuery.fetchInto(), Result.into(), Record.into()
methods to map jOOQ records to your custom POJOs:
http://www.jooq.org/javadoc/latest/org/jooq/Record.html#into%28java.lang.Class%29

Of course, I'm always open to suggestions...

> Ps.: Whats the best way to submit a bug?

You can either send a mail to the user group, or directly create a
ticket on Trac, if you have a sourceforge account:
https://sourceforge.net/apps/trac/jooq/newticket

Lukas Eder

unread,
Mar 5, 2012, 8:05:02 AM3/5/12
to jooq...@googlegroups.com
Hello Andreas,

To complement with what I have already said, you might want to
consider this presentation here. It has some nice examples of how to
model and how not to model inheritance in relational data:

http://www.slideshare.net/billkarwin/sql-antipatterns-strike-back

Cheers
Lukas

2012/3/2 Lukas Eder <lukas...@gmail.com>:

Reply all
Reply to author
Forward
0 new messages