{"slug": "jooq", "name": "jOOQ", "category": "databases", "category_name": "Databases", "description": "", "recommenders": 5, "commenters": 6, "warners": 0, "score": 4.668, "rising": -0.31, "first": "2025-11-01", "latest": "2026-08-30", "why": "Anytime I use a language other than Java it's always jooq that I miss. It's that good.", "why_is_quote": true, "has_verdict": false, "sentiment": {"recommend": 5, "neutral": 0, "compare": 1, "warn": 0}, "spark": [1, 0, 0, 0, 1, 0, 0, 0, 2, 1, 0, 0], "listed": true, "loved": [], "caveat": "", "short_quote": "Anytime I use a language other than Java it's always jooq that I miss. It's that good.", "kind": "", "icon": true, "domain": "jooq.org", "github_repo": null, "official_url": "https://www.jooq.org", "pricing": "", "aliases": ["jOOQ"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 791963649, "item_id": 49497728, "url": "https://news.ycombinator.com/item?id=49497728", "by": "arunix", "date": "2026-08-30", "version": null, "stance": "recommend", "quote": "make SQL more reusable/composable (e.g. SQLAlchemy, JOOQ, etc)", "excerpt": "ORMs based on the query object pattern don't hide the database, but make SQL more reusable/composable (e.g. SQLAlchemy, JOOQ, etc). https://martinfowler.com/eaaCatalog/queryObject.html", "context": "", "use_case": "", "switched_from": "", "story": "A better SQL in 11 lines of code"}, {"id": 784390817, "item_id": 49024426, "url": "https://news.ycombinator.com/item?id=49024426", "by": "Rendello", "date": "2026-07-23", "version": null, "stance": "recommend", "quote": "the Java people and their jOOQ", "excerpt": "And for an Struct-of-Arrays approach, DuckDB and other columnar databases can have nice advantages (I mentioned this in another comment [1]), including optimizations you wouldn't see in typical code (SoA or otherwise) like column-level compression [2]. The big problem with databases, in my opinion, is the horrible API friction between them and your code (not even SQL per se). It makes sense if you're calling out to a", "context": "", "use_case": "", "switched_from": "", "story": "Everyone Should Know SIMD"}, {"id": 782102929, "item_id": 48881433, "url": "https://news.ycombinator.com/item?id=48881433", "by": "gavinray", "date": "2026-07-12", "version": null, "stance": "recommend", "quote": "jOOQ emulates this feature for arbitrary databases and has the best explanatory article on the web about MULTISET imo", "excerpt": "MULTISET is the SQL native way of doing this but it's only implemented in Oracle, and most people have never heard of it jOOQ emulates this feature for arbitrary databases and has the best explanatory article on the web about MULTISET imo https://www.jooq.org/doc/latest/manual/sql-building/column-expressions/multiset-value-constructor/", "context": "", "use_case": "SQL query building", "switched_from": "", "story": "EF Core 11 makes your split queries faster"}, {"id": 759355872, "item_id": 47459742, "url": "https://news.ycombinator.com/item?id=47459742", "by": "matwood", "date": "2026-03-20", "version": null, "stance": "recommend", "quote": "Anytime I use a language other than Java it's always jooq that I miss. It's that good.", "excerpt": "Anytime I use a language other than Java it's always jooq that I miss. It's that good.", "context": "", "use_case": "SQL query generation", "switched_from": "", "story": "Java Is Fast. Your Code Might Not Be"}, {"id": 732518784, "item_id": 45782424, "url": "https://news.ycombinator.com/item?id=45782424", "by": "oftenwrong", "date": "2025-11-01", "version": null, "stance": "recommend", "quote": "My favourite application-later database tool so far is https://www.jooq.org/", "excerpt": "There is something to be said for having some basic data access libraries already in place, even if they are not ideal, so that developers can bang out functionality more quickly. That is the typical selling point of ORMs, isn't it? While there are well-known downsides, you can skip the ORM when it's not a good fit, or later when you realise that it is causing a problem. Generally, I prefer to create functions for sp", "context": "", "use_case": "Type-safe SQL query building", "switched_from": "", "story": "On Having a Data Object"}]}], "caveats": [], "who": [], "tags": [], "use_cases": ["sql query building", "sql query generation", "type-safe sql query building"], "compared": [], "makers": [], "threads": [{"url": "https://news.ycombinator.com/item?id=47454384", "title": "Java Is Fast. Your Code Might Not Be", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=49491544", "title": "A better SQL in 11 lines of code", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=49010648", "title": "Everyone Should Know SIMD", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=48785102", "title": "EF Core 11 makes your split queries faster", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=45719919", "title": "On Having a Data Object", "mentions": 1}], "sentiment_by_month": {"2025-11": {"recommend": 1}, "2025-12": {}, "2026-01": {}, "2026-02": {}, "2026-03": {"recommend": 1, "compare": 1}, "2026-04": {}, "2026-05": {}, "2026-06": {}, "2026-07": {"recommend": 2}, "2026-08": {"recommend": 1}, "2026-09": {}, "2026-10": {}}, "versions": [], "version_unnamed": 0, "quotes": [{"id": 791963649, "item_id": 49497728, "url": "https://news.ycombinator.com/item?id=49497728", "by": "arunix", "date": "2026-08-30", "version": null, "stance": "recommend", "quote": "make SQL more reusable/composable (e.g. SQLAlchemy, JOOQ, etc)", "excerpt": "ORMs based on the query object pattern don't hide the database, but make SQL more reusable/composable (e.g. SQLAlchemy, JOOQ, etc). https://martinfowler.com/eaaCatalog/queryObject.html", "context": "", "use_case": "", "switched_from": "", "story": "A better SQL in 11 lines of code"}, {"id": 784390817, "item_id": 49024426, "url": "https://news.ycombinator.com/item?id=49024426", "by": "Rendello", "date": "2026-07-23", "version": null, "stance": "recommend", "quote": "the Java people and their jOOQ", "excerpt": "And for an Struct-of-Arrays approach, DuckDB and other columnar databases can have nice advantages (I mentioned this in another comment [1]), including optimizations you wouldn't see in typical code (SoA or otherwise) like column-level compression [2]. The big problem with databases, in my opinion, is the horrible API friction between them and your code (not even SQL per se). It makes sense if you're calling out to a", "context": "", "use_case": "", "switched_from": "", "story": "Everyone Should Know SIMD"}, {"id": 782102929, "item_id": 48881433, "url": "https://news.ycombinator.com/item?id=48881433", "by": "gavinray", "date": "2026-07-12", "version": null, "stance": "recommend", "quote": "jOOQ emulates this feature for arbitrary databases and has the best explanatory article on the web about MULTISET imo", "excerpt": "MULTISET is the SQL native way of doing this but it's only implemented in Oracle, and most people have never heard of it jOOQ emulates this feature for arbitrary databases and has the best explanatory article on the web about MULTISET imo https://www.jooq.org/doc/latest/manual/sql-building/column-expressions/multiset-value-constructor/", "context": "", "use_case": "SQL query building", "switched_from": "", "story": "EF Core 11 makes your split queries faster"}, {"id": 759431506, "item_id": 47464469, "url": "https://news.ycombinator.com/item?id=47464469", "by": "anotherevan", "date": "2026-03-20", "version": null, "stance": "compare", "quote": "but I might have to give Jooq a try", "excerpt": "I'm rather partial to MyBatis (and Liquibase) but I might have to give Jooq a try.", "context": "", "use_case": "", "switched_from": "", "story": "Java Is Fast. Your Code Might Not Be"}, {"id": 759355872, "item_id": 47459742, "url": "https://news.ycombinator.com/item?id=47459742", "by": "matwood", "date": "2026-03-20", "version": null, "stance": "recommend", "quote": "Anytime I use a language other than Java it's always jooq that I miss. It's that good.", "excerpt": "Anytime I use a language other than Java it's always jooq that I miss. It's that good.", "context": "", "use_case": "SQL query generation", "switched_from": "", "story": "Java Is Fast. Your Code Might Not Be"}, {"id": 732518784, "item_id": 45782424, "url": "https://news.ycombinator.com/item?id=45782424", "by": "oftenwrong", "date": "2025-11-01", "version": null, "stance": "recommend", "quote": "My favourite application-later database tool so far is https://www.jooq.org/", "excerpt": "There is something to be said for having some basic data access libraries already in place, even if they are not ideal, so that developers can bang out functionality more quickly. That is the typical selling point of ORMs, isn't it? While there are well-known downsides, you can skip the ORM when it's not a good fit, or later when you realise that it is causing a problem. Generally, I prefer to create functions for sp", "context": "", "use_case": "Type-safe SQL query building", "switched_from": "", "story": "On Having a Data Object"}]}