Hubbry Logo
search button
Sign in
JOOQ Object Oriented Querying
JOOQ Object Oriented Querying
Comunity Hub
History
arrow-down
starMore
arrow-down
bob

Bob

Have a question related to this hub?

bob

Alice

Got something to say related to this hub?
Share it here.

#general is a chat channel to discuss anything related to the hub.
Hubbry Logo
search button
Sign in
JOOQ Object Oriented Querying
Community hub for the Wikipedia article
logoWikipedian hub
Welcome to the community hub built on top of the JOOQ Object Oriented Querying Wikipedia article. Here, you can discuss, collect, and organize anything related to JOOQ Object Oriented Querying. The purpos...
Add your contribution
JOOQ Object Oriented Querying
jOOQ
Developer(s)Data Geekery GmbH
Stable release
3.20.5 / June 11, 2025; 2 months ago (2025-06-11)[1]
Repositorygithub.com/jOOQ/jOOQ
Written inJava
Operating systemCross-platform
PlatformJava
TypeObject–relational mapping
LicenseDual-licensed: Apache-2.0 and commercial
Websitewww.jooq.org

jOOQ Object Oriented Querying, commonly known as jOOQ, is a light database-mapping software library in Java that implements the active record pattern. Its purpose is to be both relational and object oriented by providing a domain-specific language to construct queries from classes generated from a database schema.[citation needed]

Paradigm

[edit]

jOOQ claims that SQL should come first in any database integration. Thus, it does not introduce a new textual query language, but rather allows for constructing plain SQL from jOOQ objects and code generated from a database schema. jOOQ uses JDBC to call the underlying SQL queries. [citation needed]

While it provides abstraction on top of JDBC, jOOQ does not have as much functionality and complexity as standard object–relational mapping libraries such as EclipseLink or Hibernate.[citation needed]

jOOQ's closeness to SQL has advantages over typical object–relational mapping libraries. [citation needed] SQL has many features that cannot be used in an object oriented programming paradigm; this set of differences is referred to as the object–relational impedance mismatch. By being close to SQL, jOOQ helps to prevent syntax errors and type mapping problems. [citation needed] Also, variable binding is taken care of. It is also possible in jOOQ to create very complex queries, that involve aliasing, unions, nested selects and complex joins. jOOQ also supports database-specific features, such as UDTs, enum types, stored procedures and native functions. [citation needed]

Example

[edit]

A nested query selecting from an aliased table

-- Select authors with books that are sold out
SELECT * FROM AUTHOR a
      WHERE EXISTS (SELECT 1
                 FROM BOOK
                WHERE BOOK.STATUS = 'SOLD OUT'
                  AND BOOK.AUTHOR_ID = a.ID);

And its equivalent in jOOQ DSL:

// Use the aliased table in the select statement
create.selectFrom(table("AUTHOR").as("a"))
      .where(exists(selectOne()
                   .from(table("BOOK"))
                   .where(field("BOOK.STATUS").equal(field("BOOK_STATUS.SOLD_OUT")))
                   .and(field("BOOK.AUTHOR_ID").equal(field("a.ID")))));

Or more simply, using code generation from the database metadata to generate constants:

// Use the aliased table in the select statement
final Author a = AUTHOR.as("a");

create.selectFrom(a)
      .where(exists(selectOne()
                   .from(BOOK)
                   .where(BOOK.STATUS.equal(BOOK_STATUS.SOLD_OUT))
                   .and(BOOK.AUTHOR_ID.equal(a.ID))));

See also

[edit]

References

[edit]
  1. ^ "Tags · jOOQ/jOOQ". github.com. Retrieved 2025-08-06.
[edit]