Go to file
Lukas Eder 854375dbcf [jOOQ/jOOQ#7789] Revert change
The jOOQ 3.12 Open Source Edition will continue to support Java 8. The only things we gain from the JDK 11 dependency is:

- Updated logic for reflection when mapping into proxied default methods (that stuff has changed completely in JDK 9). This is a regression, which we can live with. The workaround is to write a custom
- Explicit dependency on the JDK 9  API, for which we provide a Java 8 compatible alternative via reactive streams anyway.
- JDBC 4.3 compatibility (mostly sharding). We currently don't use that yet.

We're not even using  internally, outside of a few integration tests. So, we'll postpone the JDK 11 *requirement* (while supporting it nonetheless) to a later release, e.g. 3.13. We'll observe market share shifts. Currently Java 11's market share is a bit of a disappointment, so making it a requirement might be premature.
2019-07-26 15:18:18 +02:00
.github/ISSUE_TEMPLATE [#8291] Create bug report / feature request / question issue templates 2019-02-05 12:00:29 +01:00
jOOQ [jOOQ/jOOQ#7789] Revert change 2019-07-26 15:18:18 +02:00
jOOQ-checker [jOOQ/jOOQ#7789] Revert change 2019-07-26 15:18:18 +02:00
jOOQ-codegen [jOOQ/jOOQ#7789] Revert change 2019-07-26 15:18:18 +02:00
jOOQ-codegen-maven [jOOQ/jOOQ#7789] Revert change 2019-07-26 15:18:18 +02:00
jOOQ-examples [jOOQ/jOOQ#7789] Revert change 2019-07-26 15:18:18 +02:00
jOOQ-meta [jOOQ/jOOQ#7789] Revert change 2019-07-26 15:18:18 +02:00
jOOQ-meta-extensions [jOOQ/jOOQ#7789] Revert change 2019-07-26 15:18:18 +02:00
jOOQ-release [jOOQ/jOOQ#7789] Revert change 2019-07-26 15:18:18 +02:00
jOOQ-scala_2.12 Fixed automatic module name 2019-07-09 09:25:51 +02:00
jOOQ-xtend/src/main/xtend/org/jooq/xtend [#5196] Add support for Amazon Aurora MySQL Edition 2018-04-26 13:22:09 +02:00
.gitignore whitespace change 2015-01-29 10:11:16 +01:00
.travis.yml [#7789] Update Travis configuration to Java 11 and Maven 3.6.0 2019-04-05 10:57:11 +02:00
authors.txt
CONTRIBUTING.md Spelling in CONTRIBUTING.md 2019-01-23 16:08:19 +03:00
LICENSE [#5754] Remove copyright (and dates) from file headers 2017-01-02 17:14:26 +01:00
pom.xml [jOOQ/jOOQ#7789] Revert change 2019-07-26 15:18:18 +02:00
README.md fix some slightly out of date links 2017-07-21 19:12:51 -04:00

jOOQ's reason for being - compared to JPA

Java and SQL have come a long way. SQL is an "ancient", yet established and well-understood technology. Java is a legacy too, although its platform JVM allows for many new and contemporary languages built on top of it. Yet, after all these years, libraries dealing with the interface between SQL and Java have come and gone, leaving JPA to be a standard that is accepted only with doubts, short of any surviving options.

So far, there had been only few database abstraction frameworks or libraries, that truly respected SQL as a first class citizen among languages. Most frameworks, including the industry standards JPA, EJB, Hibernate, JDO, Criteria Query, and many others try to hide SQL itself, minimising its scope to things called JPQL, HQL, JDOQL and various other inferior query languages

jOOQ has come to fill this gap.

jOOQ's reason of being - compared to LINQ

Other platforms incorporate ideas such as LINQ (with LINQ-to-SQL), or Scala's SLICK, or also Java's QueryDSL to better integrate querying as a concept into their respective language. By querying, they understand querying of arbitrary targets, such as SQL, XML, Collections and other heterogeneous data stores. jOOQ claims that this is going the wrong way too.

In more advanced querying use-cases (more than simple CRUD and the occasional JOIN), people will want to profit from the expressivity of SQL. Due to the relational nature of SQL, this is quite different from what object-oriented and partially functional languages such as C#, Scala, or Java can offer.

It is very hard to formally express and validate joins and the ad-hoc table expression types they create. It gets even harder when you want support for more advanced table expressions, such as pivot tables, unnested cursors, or just arbitrary projections from derived tables. With a very strong object-oriented typing model, these features will probably stay out of scope.

In essence, the decision of creating an API that looks like SQL or one that looks like C#, Scala, Java is a definite decision in favour of one or the other platform. While it will be easier to evolve SLICK in similar ways as LINQ (or QueryDSL in the Java world), SQL feature scope that clearly communicates its underlying intent will be very hard to add, later on (e.g. how would you model Oracle's partitioned outer join syntax? How would you model ANSI/ISO SQL:1999 grouping sets? How can you support scalar subquery caching? etc...).

jOOQ has come to fill this gap.

jOOQ is different

SQL was never meant to be abstracted. To be confined in the narrow boundaries of heavy mappers, hiding the beauty and simplicity of relational data. SQL was never meant to be object-oriented. SQL was never meant to be anything other than... SQL!

For more details please visit jooq.org.

Follow jOOQ on Twitter and the jOOQ blog.