SlideShare a Scribd company logo
What’s new in Hibernate 6.1?
by Christian Beikov
Who am I?
Christian Beikov
Long time Hibernate community contributor
Full time Hibernate developer at Red Hat since 2020
Founder of Blazebit and creator of Blaze-Persistence
Living in Vienna/AT and Bonn/DE
Like to play tennis and go running
Previously on “What’s next?”...
Subqueries in the from clause
Common table expressions
Lateral joins
Insert-or-Update a.k.a. Upsert
Table functions
SQL structs
SQL arrays
Previously on “What’s next?”...
Subqueries in the from clause (6.1)
Common table expressions
Lateral joins (6.1)
Insert-or-Update a.k.a. Upsert
Table functions
SQL structs
SQL arrays (6.1)
Previously on “What’s next?”...
Subqueries in the from clause (6.1)
Common table expressions (planned for 6.2)
Lateral joins (6.1)
Insert-or-Update a.k.a. Upsert (planned for 6.2)
Table functions
SQL structs
SQL arrays (6.1)
Demo time
https://github.com/beikov/presentation-hibernate-6
What’s next?
Common table expressions (planned for 6.2)
Insert-or-Update a.k.a. Upsert (planned for 6.2)
Table functions
SQL structs
SQL enums
JSON, XML and array functions
Joins in DML (update, delete)
Q & A
Extra slides
Motivation for Hibernate 6.0
Performance improvements
● Read by name is slow in JDBC ResultSet
● JPA Criteria implementation required string building and parsing
Design improvements
● Query AST was Antlr2 based and hard to maintain/extend
● Dialect specific SQL translation was hard
● Runtime model was centered around Type
● Cleanup of deprecated APIs and SPIs
● More type safety and generics improvements
Read by name
Changing to position based ResultSetreading has big impact
● Throughput testing showed it is faster
● Many APIs and SPIs needed to adapt e.g. Type
● Allows omitting select aliases and produce smaller SQL
Took the opportunity to implement select item deduplication
● Occasionally requested enhancement
● Reduce amount of fetched data
Read by name
Hibernate 5.x
select
entity0_.id as id1_1_0_,
entity0_.name as name2_1_0_,
entity0_.id as onetoone3_1_0_
from
Entity entity0_
where
entity0_.id=?
Hibernate 6.0
select
e1_0.id,
e1_0.name
from
Entity e1_0
where
e1_0.id=?
JPA Criteria
5.x handles JPA Criteria on top of HQL
● CriteriaQueryis translated to HQL and then parsed
● But uses a special CriteriaLoaderwith custom fetch handling
6.0 introduces the semantic query model (SQM) as AST model
● SQM AST implements JPA Criteria API
● HQL is also parsed to SQM AST
● Further boost with hibernate.criteria.copy_treedisabled
● Smart handling of plain values parameter vs. literal
Query improvements
Semantic query model (SQM) as unified AST for JPA Criteria and HQL
Easier maintenance/extensibility thanks to update to ANTLR4
Functions received lots of new features
● FunctionReturnTypeResolverwith full AST access e.g. extract(second)
● FunctionArgumentTypeResolverinference through context e.g. coalesce(..)
● ArgumentsValidatorfor early type validation
● Can generate special SQM- and SQL-AST for e.g. emulations
Query improvements
Set operation support (from ANSI SQL-92)
select e from Entity e where e.type = 1
union
select e from Entity e where e.type = 2
intersect
select e from Entity e where e.type = 3
except
select e from Entity e where e.deleted
Query improvements
Set operation support in JPA Criteria
HibernateCriteriaBuilder cb = session.getCriteriaBuilder();
var q1 = cb.createQuery( Entity.class );
var q2 = cb.createQuery( Entity.class );
// Apply restrictions to q1 and q2 ...
TypedQuery<Entity> q = session.createQuery( cb.union( q1, q2 ) );
Query improvements
LIMIT, OFFSETand FETCHclause support (ANSI SQL 2003)
select p.name, p.score
from Player p
order by p.score desc
fetch first 3 rows with ties
name score
Thor 10
Hulk 10
Tony 7
Vision 7
Query improvements
LIMIT, OFFSETand FETCHclause support
HibernateCriteriaBuilder cb = session.getCriteriaBuilder();
JpaCriteriaQuery<Entity> q1 = cb.createQuery( Entity.class );
JpaRoot<Entity> root = q1.from( Entity.class );
q1.fetch( 3, FetchClauseType.ROWS_WITH_TIES );
TypedQuery<Entity> q = session.createQuery( q1 );
Query improvements
Support for OVERclause a.k.a. window functions (ANSI SQL 2003)
select
format(c.ts as ‘yyyy’’Q’’Q’),
sum(c.amount),
sum(c.amount) - lag(sum(c.amount))
over (order by format(c.ts as ‘yyyy’’Q’’Q’)) as delta
from Costs c
group by format(c.ts as ‘yyyy’’Q’’Q’)
period amount delta
2021Q4 100 NULL
2022Q1 120 20
Query improvements
Ordered set-aggregate functions i.e. LISTAGG(ANSI SQL 2016)
select pr.id, listagg(p.name, ‘, ’) within group (order by p.name)
from Project pr join pr.participants p
group by pr.id
order by pr.id
id participants
1 Bruce Banner, Natasha Romanoff, Tony Stark
.. ..
Query improvements
Summarization support i.e. ROLLUP(ANSI SQL-99)
select
s.state,
s.city,
sum(s.price * s.quantity)
from Sales s
group by rollup (s.state, s.city)
order by s.state, s.city nulls last
state city amount
CA SF 100
CA SJ 120
CA NULL 220
Query improvements
FILTER clause support (ANSI SQL 2016)
select
count(*) filter (where s.price * s.quantity < 10) as small_sales,
count(*) filter (where s.price * s.quantity >= 10) as big_sales
from Sales s
small_sales big_sales
10 20
Query improvements
ILIKEpredicate support
select e
from Entity e
where e.name ilike ‘%tony%’
Fallback to lower(e.name) like lower(‘%tony’)
Query improvements
Tuple syntax support with great emulation
Align expressions/predicates i.e. ... where my_function(value > 1) and ...
Temporal arithmetic support i.e. ts1 - ts2returns Duration
Duration extraction support with BY operator i.e. (ts1 - ts2) by hour
Duration literal support i.e. ts1 + 1 day
Support for DISTINCT FROMpredicate
etc.
Query improvements
Session#createSelectionQueryfor select only queries
● No executeUpdatemethod
Session#createMutationQueryfor mutation only queries
● No getResultList/getSingleResultetc. methods
Early validations and communication of intent
Dialect specific SQL
SQL-AST as intermediate representation of (modern) SQL as tree
5.x has a single HQL to SQL string translator with lots of if-branches per dialect-support
Dialects in 6.0 provide custom translators for handling emulations
SQL-AST enables sophisticated transformations/emulations efficiently
● Introduction of dummy FROMelements (Sybase)
● Emulate aggregate functions through window functions (MySQL, SQL Server, …)
Runtime model
Model in 5.x was centered around org.hibernate.type.Type
Created OO runtime model since switch to read by position required changes anyway
Moved logic to runtime model defined through capabilities i.e. Fetchable
Removed multi-column basic mappings in favor of custom embeddable mappings
Split logic from BasicTypeinto JdbcType/JavaTypeand removed most implementations
Introduce BasicTypeReferencein StandardBasicTypesfor late resolving
Support for new SQL types through Dialect contribution
● JSONtype for storing any type as JSONB/JSON/CLOB/VARCHAR
● UUIDtype for java.util.UUID
● INTERVAL_SECONDtype for java.time.Duration
● INETtype for java.net.InetAddress
Replace @TypeDefwith type safe variants i.e. @JavaTypeRegistration
Replace @Typewith type safe variants i.e. @JavaType
Mapping improvements
Mapping improvements
CompositeUserTypebridges gap between custom types and embeddables
Embeddable mapper class for defining mapping structure
Full control on construction and deconstruction of custom type
● Support for library types i.e. MonetaryAmount
● Repurpose existing types i.e. OffsetDateTime
Out of the box support for Java records in discussion
Other changes
Switch to Jakarta Persistence
Remove deprecated stuff i.e. legacy Criteria API
Add type variables to APIs/SPIs where possible
Dialectwas majorly updated
Renaming of JavaTypeDescriptorand SqlTypeDescriptor
See https://github.com/hibernate/hibernate-orm/blob/6.0/migration-guide.adoc

More Related Content

PDF
Hibernate 6.0 - What's new.pdf
PDF
The Functional Programming Triad of Map, Filter and Fold
PDF
OOP and FP
PDF
Getting Started with Confluent Schema Registry
PDF
Building an ML Platform with Ray and MLflow
PDF
OAuth 2.0 Integration Patterns with XACML
PDF
How to use Map() Filter() and Reduce() functions in Python | Edureka
PPTX
Kotlin Basic & Android Programming
Hibernate 6.0 - What's new.pdf
The Functional Programming Triad of Map, Filter and Fold
OOP and FP
Getting Started with Confluent Schema Registry
Building an ML Platform with Ray and MLflow
OAuth 2.0 Integration Patterns with XACML
How to use Map() Filter() and Reduce() functions in Python | Edureka
Kotlin Basic & Android Programming

What's hot (20)

PDF
Deep Dive Java 17 Devoxx UK
PDF
Apache Calcite (a tutorial given at BOSS '21)
PDF
Tracing the Breadcrumbs: Apache Spark Workload Diagnostics
PDF
Java 8-streams-collectors-patterns
PDF
Understanding Reactive Programming
PDF
Automating the Cloud with Terraform, and Ansible
PPTX
Ingestion in data pipelines with Managed Kafka Clusters in Azure HDInsight
PPSX
Rational team concert (RTC) tips
PPTX
Building a Distributed Reservation System with Cassandra (Andrew Baker & Jeff...
PDF
Working with JSON Data in PostgreSQL vs. MongoDB
PPTX
PPTX
Generic Test Automation Architecture
PDF
Serving ML easily with FastAPI
PDF
Json in Postgres - the Roadmap
 
PDF
codecentric AG: CQRS and Event Sourcing Applications with Cassandra
PPTX
Slim Baltagi – Flink vs. Spark
PPTX
Optimizing Apache Spark SQL Joins
PPTX
Agile Testing and Test Automation
PDF
Introduction to Hibernate Framework
PPTX
Apache Superset - open source data exploration and visualization (Conclusion ...
Deep Dive Java 17 Devoxx UK
Apache Calcite (a tutorial given at BOSS '21)
Tracing the Breadcrumbs: Apache Spark Workload Diagnostics
Java 8-streams-collectors-patterns
Understanding Reactive Programming
Automating the Cloud with Terraform, and Ansible
Ingestion in data pipelines with Managed Kafka Clusters in Azure HDInsight
Rational team concert (RTC) tips
Building a Distributed Reservation System with Cassandra (Andrew Baker & Jeff...
Working with JSON Data in PostgreSQL vs. MongoDB
Generic Test Automation Architecture
Serving ML easily with FastAPI
Json in Postgres - the Roadmap
 
codecentric AG: CQRS and Event Sourcing Applications with Cassandra
Slim Baltagi – Flink vs. Spark
Optimizing Apache Spark SQL Joins
Agile Testing and Test Automation
Introduction to Hibernate Framework
Apache Superset - open source data exploration and visualization (Conclusion ...
Ad

Similar to Hibernate 6.1 - What's new.pdf (20)

ODP
MySQL 5.7 - What's new and How to upgrade
PDF
MySQL 5.7 - What's new, How to upgrade and Document Store
PPTX
MySQL Tech Tour 2015 - 5.7 Whats new
PDF
ITB 2023 qb, Migration, Seeders. Recipe For Success - Gavin-Pickin.pdf
PDF
Upgrade to MySQL 5.7 and latest news planned for MySQL 8
PDF
Deep dive into Hibernate ORM 6.4 features
PDF
The Java EE 6 platform
PDF
qb for the rest of us - sam knowlton
PDF
Spring Day | Spring and Scala | Eberhard Wolff
PDF
Hypertable Nosql
PDF
Hypertable
PPT
Sqlapi0.1
ODP
Meetup cassandra sfo_jdbc
PPT
SQL Server 2008 Integration Services
PDF
What's New In PostgreSQL 9.4
PDF
Fast federated SQL with Apache Calcite
PPT
Ms sql server architecture
PPTX
State of entity framework
PPTX
The latest with MySql on OpenStack Trove
KEY
DjangoCon 2010 Scaling Disqus
MySQL 5.7 - What's new and How to upgrade
MySQL 5.7 - What's new, How to upgrade and Document Store
MySQL Tech Tour 2015 - 5.7 Whats new
ITB 2023 qb, Migration, Seeders. Recipe For Success - Gavin-Pickin.pdf
Upgrade to MySQL 5.7 and latest news planned for MySQL 8
Deep dive into Hibernate ORM 6.4 features
The Java EE 6 platform
qb for the rest of us - sam knowlton
Spring Day | Spring and Scala | Eberhard Wolff
Hypertable Nosql
Hypertable
Sqlapi0.1
Meetup cassandra sfo_jdbc
SQL Server 2008 Integration Services
What's New In PostgreSQL 9.4
Fast federated SQL with Apache Calcite
Ms sql server architecture
State of entity framework
The latest with MySql on OpenStack Trove
DjangoCon 2010 Scaling Disqus
Ad

Recently uploaded (20)

PPTX
Transform Your Business with a Software ERP System
PPT
Introduction Database Management System for Course Database
PDF
System and Network Administration Chapter 2
PPTX
Computer Software and OS of computer science of grade 11.pptx
PDF
Which alternative to Crystal Reports is best for small or large businesses.pdf
PDF
Understanding Forklifts - TECH EHS Solution
PDF
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
PPTX
Introduction to Artificial Intelligence
PDF
wealthsignaloriginal-com-DS-text-... (1).pdf
PDF
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
PDF
top salesforce developer skills in 2025.pdf
PDF
Navsoft: AI-Powered Business Solutions & Custom Software Development
PDF
How to Migrate SBCGlobal Email to Yahoo Easily
PDF
PTS Company Brochure 2025 (1).pdf.......
PPTX
assetexplorer- product-overview - presentation
PPTX
L1 - Introduction to python Backend.pptx
PDF
2025 Textile ERP Trends: SAP, Odoo & Oracle
PDF
Design an Analysis of Algorithms I-SECS-1021-03
PDF
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
PPTX
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
Transform Your Business with a Software ERP System
Introduction Database Management System for Course Database
System and Network Administration Chapter 2
Computer Software and OS of computer science of grade 11.pptx
Which alternative to Crystal Reports is best for small or large businesses.pdf
Understanding Forklifts - TECH EHS Solution
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
Introduction to Artificial Intelligence
wealthsignaloriginal-com-DS-text-... (1).pdf
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
top salesforce developer skills in 2025.pdf
Navsoft: AI-Powered Business Solutions & Custom Software Development
How to Migrate SBCGlobal Email to Yahoo Easily
PTS Company Brochure 2025 (1).pdf.......
assetexplorer- product-overview - presentation
L1 - Introduction to python Backend.pptx
2025 Textile ERP Trends: SAP, Odoo & Oracle
Design an Analysis of Algorithms I-SECS-1021-03
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx

Hibernate 6.1 - What's new.pdf

  • 1. What’s new in Hibernate 6.1? by Christian Beikov
  • 2. Who am I? Christian Beikov Long time Hibernate community contributor Full time Hibernate developer at Red Hat since 2020 Founder of Blazebit and creator of Blaze-Persistence Living in Vienna/AT and Bonn/DE Like to play tennis and go running
  • 3. Previously on “What’s next?”... Subqueries in the from clause Common table expressions Lateral joins Insert-or-Update a.k.a. Upsert Table functions SQL structs SQL arrays
  • 4. Previously on “What’s next?”... Subqueries in the from clause (6.1) Common table expressions Lateral joins (6.1) Insert-or-Update a.k.a. Upsert Table functions SQL structs SQL arrays (6.1)
  • 5. Previously on “What’s next?”... Subqueries in the from clause (6.1) Common table expressions (planned for 6.2) Lateral joins (6.1) Insert-or-Update a.k.a. Upsert (planned for 6.2) Table functions SQL structs SQL arrays (6.1)
  • 7. What’s next? Common table expressions (planned for 6.2) Insert-or-Update a.k.a. Upsert (planned for 6.2) Table functions SQL structs SQL enums JSON, XML and array functions Joins in DML (update, delete)
  • 10. Motivation for Hibernate 6.0 Performance improvements ● Read by name is slow in JDBC ResultSet ● JPA Criteria implementation required string building and parsing Design improvements ● Query AST was Antlr2 based and hard to maintain/extend ● Dialect specific SQL translation was hard ● Runtime model was centered around Type ● Cleanup of deprecated APIs and SPIs ● More type safety and generics improvements
  • 11. Read by name Changing to position based ResultSetreading has big impact ● Throughput testing showed it is faster ● Many APIs and SPIs needed to adapt e.g. Type ● Allows omitting select aliases and produce smaller SQL Took the opportunity to implement select item deduplication ● Occasionally requested enhancement ● Reduce amount of fetched data
  • 12. Read by name Hibernate 5.x select entity0_.id as id1_1_0_, entity0_.name as name2_1_0_, entity0_.id as onetoone3_1_0_ from Entity entity0_ where entity0_.id=? Hibernate 6.0 select e1_0.id, e1_0.name from Entity e1_0 where e1_0.id=?
  • 13. JPA Criteria 5.x handles JPA Criteria on top of HQL ● CriteriaQueryis translated to HQL and then parsed ● But uses a special CriteriaLoaderwith custom fetch handling 6.0 introduces the semantic query model (SQM) as AST model ● SQM AST implements JPA Criteria API ● HQL is also parsed to SQM AST ● Further boost with hibernate.criteria.copy_treedisabled ● Smart handling of plain values parameter vs. literal
  • 14. Query improvements Semantic query model (SQM) as unified AST for JPA Criteria and HQL Easier maintenance/extensibility thanks to update to ANTLR4 Functions received lots of new features ● FunctionReturnTypeResolverwith full AST access e.g. extract(second) ● FunctionArgumentTypeResolverinference through context e.g. coalesce(..) ● ArgumentsValidatorfor early type validation ● Can generate special SQM- and SQL-AST for e.g. emulations
  • 15. Query improvements Set operation support (from ANSI SQL-92) select e from Entity e where e.type = 1 union select e from Entity e where e.type = 2 intersect select e from Entity e where e.type = 3 except select e from Entity e where e.deleted
  • 16. Query improvements Set operation support in JPA Criteria HibernateCriteriaBuilder cb = session.getCriteriaBuilder(); var q1 = cb.createQuery( Entity.class ); var q2 = cb.createQuery( Entity.class ); // Apply restrictions to q1 and q2 ... TypedQuery<Entity> q = session.createQuery( cb.union( q1, q2 ) );
  • 17. Query improvements LIMIT, OFFSETand FETCHclause support (ANSI SQL 2003) select p.name, p.score from Player p order by p.score desc fetch first 3 rows with ties name score Thor 10 Hulk 10 Tony 7 Vision 7
  • 18. Query improvements LIMIT, OFFSETand FETCHclause support HibernateCriteriaBuilder cb = session.getCriteriaBuilder(); JpaCriteriaQuery<Entity> q1 = cb.createQuery( Entity.class ); JpaRoot<Entity> root = q1.from( Entity.class ); q1.fetch( 3, FetchClauseType.ROWS_WITH_TIES ); TypedQuery<Entity> q = session.createQuery( q1 );
  • 19. Query improvements Support for OVERclause a.k.a. window functions (ANSI SQL 2003) select format(c.ts as ‘yyyy’’Q’’Q’), sum(c.amount), sum(c.amount) - lag(sum(c.amount)) over (order by format(c.ts as ‘yyyy’’Q’’Q’)) as delta from Costs c group by format(c.ts as ‘yyyy’’Q’’Q’) period amount delta 2021Q4 100 NULL 2022Q1 120 20
  • 20. Query improvements Ordered set-aggregate functions i.e. LISTAGG(ANSI SQL 2016) select pr.id, listagg(p.name, ‘, ’) within group (order by p.name) from Project pr join pr.participants p group by pr.id order by pr.id id participants 1 Bruce Banner, Natasha Romanoff, Tony Stark .. ..
  • 21. Query improvements Summarization support i.e. ROLLUP(ANSI SQL-99) select s.state, s.city, sum(s.price * s.quantity) from Sales s group by rollup (s.state, s.city) order by s.state, s.city nulls last state city amount CA SF 100 CA SJ 120 CA NULL 220
  • 22. Query improvements FILTER clause support (ANSI SQL 2016) select count(*) filter (where s.price * s.quantity < 10) as small_sales, count(*) filter (where s.price * s.quantity >= 10) as big_sales from Sales s small_sales big_sales 10 20
  • 23. Query improvements ILIKEpredicate support select e from Entity e where e.name ilike ‘%tony%’ Fallback to lower(e.name) like lower(‘%tony’)
  • 24. Query improvements Tuple syntax support with great emulation Align expressions/predicates i.e. ... where my_function(value > 1) and ... Temporal arithmetic support i.e. ts1 - ts2returns Duration Duration extraction support with BY operator i.e. (ts1 - ts2) by hour Duration literal support i.e. ts1 + 1 day Support for DISTINCT FROMpredicate etc.
  • 25. Query improvements Session#createSelectionQueryfor select only queries ● No executeUpdatemethod Session#createMutationQueryfor mutation only queries ● No getResultList/getSingleResultetc. methods Early validations and communication of intent
  • 26. Dialect specific SQL SQL-AST as intermediate representation of (modern) SQL as tree 5.x has a single HQL to SQL string translator with lots of if-branches per dialect-support Dialects in 6.0 provide custom translators for handling emulations SQL-AST enables sophisticated transformations/emulations efficiently ● Introduction of dummy FROMelements (Sybase) ● Emulate aggregate functions through window functions (MySQL, SQL Server, …)
  • 27. Runtime model Model in 5.x was centered around org.hibernate.type.Type Created OO runtime model since switch to read by position required changes anyway Moved logic to runtime model defined through capabilities i.e. Fetchable Removed multi-column basic mappings in favor of custom embeddable mappings Split logic from BasicTypeinto JdbcType/JavaTypeand removed most implementations Introduce BasicTypeReferencein StandardBasicTypesfor late resolving
  • 28. Support for new SQL types through Dialect contribution ● JSONtype for storing any type as JSONB/JSON/CLOB/VARCHAR ● UUIDtype for java.util.UUID ● INTERVAL_SECONDtype for java.time.Duration ● INETtype for java.net.InetAddress Replace @TypeDefwith type safe variants i.e. @JavaTypeRegistration Replace @Typewith type safe variants i.e. @JavaType Mapping improvements
  • 29. Mapping improvements CompositeUserTypebridges gap between custom types and embeddables Embeddable mapper class for defining mapping structure Full control on construction and deconstruction of custom type ● Support for library types i.e. MonetaryAmount ● Repurpose existing types i.e. OffsetDateTime Out of the box support for Java records in discussion
  • 30. Other changes Switch to Jakarta Persistence Remove deprecated stuff i.e. legacy Criteria API Add type variables to APIs/SPIs where possible Dialectwas majorly updated Renaming of JavaTypeDescriptorand SqlTypeDescriptor See https://github.com/hibernate/hibernate-orm/blob/6.0/migration-guide.adoc