SlideShare une entreprise Scribd logo
1  sur  26
Télécharger pour lire hors ligne
What’s new in Hibernate 6.0?
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
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
Demo time
https://github.com/beikov/presentation-hibernate-6
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/main/migration-guide.adoc
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
Q & A

Contenu connexe

Tendances

20180518 QNAP Seminar - Introduction to React Native
20180518 QNAP Seminar - Introduction to React Native20180518 QNAP Seminar - Introduction to React Native
20180518 QNAP Seminar - Introduction to React NativeEric Deng
 
今さらWPF? いいえ、今こそWPF!
今さらWPF?いいえ、今こそWPF!今さらWPF?いいえ、今こそWPF!
今さらWPF? いいえ、今こそWPF!Yuya Yamaki
 
Python Advanced – Building on the foundation
Python Advanced – Building on the foundationPython Advanced – Building on the foundation
Python Advanced – Building on the foundationKevlin Henney
 
Functional Domain Modeling - The ZIO 2 Way
Functional Domain Modeling - The ZIO 2 WayFunctional Domain Modeling - The ZIO 2 Way
Functional Domain Modeling - The ZIO 2 WayDebasish Ghosh
 
Java Annotation Processing: A Beginner Walkthrough
Java Annotation Processing: A Beginner WalkthroughJava Annotation Processing: A Beginner Walkthrough
Java Annotation Processing: A Beginner WalkthroughMahfuz Islam Bhuiyan
 
객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)Seung-June Lee
 
JUnit5 and TestContainers
JUnit5 and TestContainersJUnit5 and TestContainers
JUnit5 and TestContainersSunghyouk Bae
 
Advanced WebLogic Monitoring: JMX and WLSDM Automation
Advanced WebLogic Monitoring: JMX and WLSDM AutomationAdvanced WebLogic Monitoring: JMX and WLSDM Automation
Advanced WebLogic Monitoring: JMX and WLSDM AutomationM. Fevzi Korkutata
 
Python Fundamentals
Python FundamentalsPython Fundamentals
Python FundamentalsSherif Rasmy
 
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTOiFunFactory Inc.
 
JPA - Java Persistence API
JPA - Java Persistence APIJPA - Java Persistence API
JPA - Java Persistence APIThomas Wöhlke
 
Rego University: Resource Management, CA PPM (CA Clarity PPM)
Rego University: Resource Management, CA PPM (CA Clarity PPM)Rego University: Resource Management, CA PPM (CA Clarity PPM)
Rego University: Resource Management, CA PPM (CA Clarity PPM)Rego Consulting
 
Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!Jakub Kubrynski
 
백기선의 스프링 부트
백기선의 스프링 부트백기선의 스프링 부트
백기선의 스프링 부트Keesun Baik
 
Spring @Transactional Explained
Spring @Transactional ExplainedSpring @Transactional Explained
Spring @Transactional ExplainedVictor Rentea
 
소프트웨어 학습 및 자바 웹 개발자 학습 로드맵
소프트웨어 학습 및 자바 웹 개발자 학습 로드맵소프트웨어 학습 및 자바 웹 개발자 학습 로드맵
소프트웨어 학습 및 자바 웹 개발자 학습 로드맵Javajigi Jaesung
 
golang.tokyo #6 (in Japanese)
golang.tokyo #6 (in Japanese)golang.tokyo #6 (in Japanese)
golang.tokyo #6 (in Japanese)Yuichi Murata
 

Tendances (20)

20180518 QNAP Seminar - Introduction to React Native
20180518 QNAP Seminar - Introduction to React Native20180518 QNAP Seminar - Introduction to React Native
20180518 QNAP Seminar - Introduction to React Native
 
今さらWPF? いいえ、今こそWPF!
今さらWPF?いいえ、今こそWPF!今さらWPF?いいえ、今こそWPF!
今さらWPF? いいえ、今こそWPF!
 
Python Advanced – Building on the foundation
Python Advanced – Building on the foundationPython Advanced – Building on the foundation
Python Advanced – Building on the foundation
 
Functional Domain Modeling - The ZIO 2 Way
Functional Domain Modeling - The ZIO 2 WayFunctional Domain Modeling - The ZIO 2 Way
Functional Domain Modeling - The ZIO 2 Way
 
Java Annotation Processing: A Beginner Walkthrough
Java Annotation Processing: A Beginner WalkthroughJava Annotation Processing: A Beginner Walkthrough
Java Annotation Processing: A Beginner Walkthrough
 
객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)객체지향 개념 (쫌 아는체 하기)
객체지향 개념 (쫌 아는체 하기)
 
JUnit5 and TestContainers
JUnit5 and TestContainersJUnit5 and TestContainers
JUnit5 and TestContainers
 
Advanced WebLogic Monitoring: JMX and WLSDM Automation
Advanced WebLogic Monitoring: JMX and WLSDM AutomationAdvanced WebLogic Monitoring: JMX and WLSDM Automation
Advanced WebLogic Monitoring: JMX and WLSDM Automation
 
Python Fundamentals
Python FundamentalsPython Fundamentals
Python Fundamentals
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
 
JPA - Java Persistence API
JPA - Java Persistence APIJPA - Java Persistence API
JPA - Java Persistence API
 
Ngrx slides
Ngrx slidesNgrx slides
Ngrx slides
 
Rego University: Resource Management, CA PPM (CA Clarity PPM)
Rego University: Resource Management, CA PPM (CA Clarity PPM)Rego University: Resource Management, CA PPM (CA Clarity PPM)
Rego University: Resource Management, CA PPM (CA Clarity PPM)
 
Introduction to Spring Boot!
Introduction to Spring Boot!Introduction to Spring Boot!
Introduction to Spring Boot!
 
백기선의 스프링 부트
백기선의 스프링 부트백기선의 스프링 부트
백기선의 스프링 부트
 
Spring @Transactional Explained
Spring @Transactional ExplainedSpring @Transactional Explained
Spring @Transactional Explained
 
소프트웨어 학습 및 자바 웹 개발자 학습 로드맵
소프트웨어 학습 및 자바 웹 개발자 학습 로드맵소프트웨어 학습 및 자바 웹 개발자 학습 로드맵
소프트웨어 학습 및 자바 웹 개발자 학습 로드맵
 
golang.tokyo #6 (in Japanese)
golang.tokyo #6 (in Japanese)golang.tokyo #6 (in Japanese)
golang.tokyo #6 (in Japanese)
 
F# for C# Programmers
F# for C# ProgrammersF# for C# Programmers
F# for C# Programmers
 

Similaire à Hibernate 6.0 - What's new.pdf

Spring Day | Spring and Scala | Eberhard Wolff
Spring Day | Spring and Scala | Eberhard WolffSpring Day | Spring and Scala | Eberhard Wolff
Spring Day | Spring and Scala | Eberhard WolffJAX London
 
SQL Server 2000 Research Series - Transact SQL
SQL Server 2000 Research Series - Transact SQLSQL Server 2000 Research Series - Transact SQL
SQL Server 2000 Research Series - Transact SQLJerry Yang
 
PostgreSQL 8.4 TriLUG 2009-11-12
PostgreSQL 8.4 TriLUG 2009-11-12PostgreSQL 8.4 TriLUG 2009-11-12
PostgreSQL 8.4 TriLUG 2009-11-12Andrew Dunstan
 
Slice: OpenJPA for Distributed Persistence
Slice: OpenJPA for Distributed PersistenceSlice: OpenJPA for Distributed Persistence
Slice: OpenJPA for Distributed PersistencePinaki Poddar
 
Core2 Document - Java SCORE Overview.pptx.pdf
Core2 Document - Java SCORE Overview.pptx.pdfCore2 Document - Java SCORE Overview.pptx.pdf
Core2 Document - Java SCORE Overview.pptx.pdfThchTrngGia
 
Java New Evolution
Java New EvolutionJava New Evolution
Java New EvolutionAllan Huang
 
What's New in MariaDB Server 10.2 and MariaDB MaxScale 2.1
What's New in MariaDB Server 10.2 and MariaDB MaxScale 2.1What's New in MariaDB Server 10.2 and MariaDB MaxScale 2.1
What's New in MariaDB Server 10.2 and MariaDB MaxScale 2.1MariaDB plc
 
What's New in MariaDB Server 10.2 and MariaDB MaxScale 2.1
What's New in MariaDB Server 10.2 and MariaDB MaxScale 2.1What's New in MariaDB Server 10.2 and MariaDB MaxScale 2.1
What's New in MariaDB Server 10.2 and MariaDB MaxScale 2.1MariaDB plc
 
Apache Calcite: One Frontend to Rule Them All
Apache Calcite: One Frontend to Rule Them AllApache Calcite: One Frontend to Rule Them All
Apache Calcite: One Frontend to Rule Them AllMichael Mior
 
What’s New in MariaDB Server 10.2
What’s New in MariaDB Server 10.2What’s New in MariaDB Server 10.2
What’s New in MariaDB Server 10.2MariaDB plc
 
Die Neuheiten in MariaDB 10.2 und MaxScale 2.1
Die Neuheiten in MariaDB 10.2 und MaxScale 2.1Die Neuheiten in MariaDB 10.2 und MaxScale 2.1
Die Neuheiten in MariaDB 10.2 und MaxScale 2.1MariaDB plc
 
Java one 2010
Java one 2010Java one 2010
Java one 2010scdn
 
NOSQL and Cassandra
NOSQL and CassandraNOSQL and Cassandra
NOSQL and Cassandrarantav
 
WSO2 Product Release Webinar: WSO2 Complex Event Processor 4.0
WSO2 Product Release Webinar: WSO2 Complex Event Processor 4.0WSO2 Product Release Webinar: WSO2 Complex Event Processor 4.0
WSO2 Product Release Webinar: WSO2 Complex Event Processor 4.0WSO2
 
Meetup cassandra for_java_cql
Meetup cassandra for_java_cqlMeetup cassandra for_java_cql
Meetup cassandra for_java_cqlzznate
 
Spark SQL Catalyst Code Optimization using Function Outlining with Kavana Bha...
Spark SQL Catalyst Code Optimization using Function Outlining with Kavana Bha...Spark SQL Catalyst Code Optimization using Function Outlining with Kavana Bha...
Spark SQL Catalyst Code Optimization using Function Outlining with Kavana Bha...Databricks
 
03 2017Emea_RoadshowMilan-WhatsNew-Mariadbserver10_2andmaxscale 2_1
03 2017Emea_RoadshowMilan-WhatsNew-Mariadbserver10_2andmaxscale 2_103 2017Emea_RoadshowMilan-WhatsNew-Mariadbserver10_2andmaxscale 2_1
03 2017Emea_RoadshowMilan-WhatsNew-Mariadbserver10_2andmaxscale 2_1mlraviol
 
Javatraining
JavatrainingJavatraining
Javatrainingducat1989
 

Similaire à Hibernate 6.0 - What's new.pdf (20)

Spring Day | Spring and Scala | Eberhard Wolff
Spring Day | Spring and Scala | Eberhard WolffSpring Day | Spring and Scala | Eberhard Wolff
Spring Day | Spring and Scala | Eberhard Wolff
 
Scala and Spring
Scala and SpringScala and Spring
Scala and Spring
 
SQL Server 2000 Research Series - Transact SQL
SQL Server 2000 Research Series - Transact SQLSQL Server 2000 Research Series - Transact SQL
SQL Server 2000 Research Series - Transact SQL
 
PostgreSQL 8.4 TriLUG 2009-11-12
PostgreSQL 8.4 TriLUG 2009-11-12PostgreSQL 8.4 TriLUG 2009-11-12
PostgreSQL 8.4 TriLUG 2009-11-12
 
Slice: OpenJPA for Distributed Persistence
Slice: OpenJPA for Distributed PersistenceSlice: OpenJPA for Distributed Persistence
Slice: OpenJPA for Distributed Persistence
 
Core2 Document - Java SCORE Overview.pptx.pdf
Core2 Document - Java SCORE Overview.pptx.pdfCore2 Document - Java SCORE Overview.pptx.pdf
Core2 Document - Java SCORE Overview.pptx.pdf
 
Java New Evolution
Java New EvolutionJava New Evolution
Java New Evolution
 
What's New in MariaDB Server 10.2 and MariaDB MaxScale 2.1
What's New in MariaDB Server 10.2 and MariaDB MaxScale 2.1What's New in MariaDB Server 10.2 and MariaDB MaxScale 2.1
What's New in MariaDB Server 10.2 and MariaDB MaxScale 2.1
 
What's New in MariaDB Server 10.2 and MariaDB MaxScale 2.1
What's New in MariaDB Server 10.2 and MariaDB MaxScale 2.1What's New in MariaDB Server 10.2 and MariaDB MaxScale 2.1
What's New in MariaDB Server 10.2 and MariaDB MaxScale 2.1
 
Apache Calcite: One Frontend to Rule Them All
Apache Calcite: One Frontend to Rule Them AllApache Calcite: One Frontend to Rule Them All
Apache Calcite: One Frontend to Rule Them All
 
What’s New in MariaDB Server 10.2
What’s New in MariaDB Server 10.2What’s New in MariaDB Server 10.2
What’s New in MariaDB Server 10.2
 
Die Neuheiten in MariaDB 10.2 und MaxScale 2.1
Die Neuheiten in MariaDB 10.2 und MaxScale 2.1Die Neuheiten in MariaDB 10.2 und MaxScale 2.1
Die Neuheiten in MariaDB 10.2 und MaxScale 2.1
 
Java one 2010
Java one 2010Java one 2010
Java one 2010
 
NOSQL and Cassandra
NOSQL and CassandraNOSQL and Cassandra
NOSQL and Cassandra
 
WSO2 Product Release Webinar: WSO2 Complex Event Processor 4.0
WSO2 Product Release Webinar: WSO2 Complex Event Processor 4.0WSO2 Product Release Webinar: WSO2 Complex Event Processor 4.0
WSO2 Product Release Webinar: WSO2 Complex Event Processor 4.0
 
Meetup cassandra for_java_cql
Meetup cassandra for_java_cqlMeetup cassandra for_java_cql
Meetup cassandra for_java_cql
 
Spark SQL Catalyst Code Optimization using Function Outlining with Kavana Bha...
Spark SQL Catalyst Code Optimization using Function Outlining with Kavana Bha...Spark SQL Catalyst Code Optimization using Function Outlining with Kavana Bha...
Spark SQL Catalyst Code Optimization using Function Outlining with Kavana Bha...
 
03 2017Emea_RoadshowMilan-WhatsNew-Mariadbserver10_2andmaxscale 2_1
03 2017Emea_RoadshowMilan-WhatsNew-Mariadbserver10_2andmaxscale 2_103 2017Emea_RoadshowMilan-WhatsNew-Mariadbserver10_2andmaxscale 2_1
03 2017Emea_RoadshowMilan-WhatsNew-Mariadbserver10_2andmaxscale 2_1
 
Javatraining
JavatrainingJavatraining
Javatraining
 
Ast transformation
Ast transformationAst transformation
Ast transformation
 

Dernier

Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AIABDERRAOUF MEHENNI
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️anilsa9823
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideChristina Lin
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number SystemsJheuzeDellosa
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...stazi3110
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...ICS
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationkaushalgiri8080
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 

Dernier (20)

Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop SlideBuilding Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
Building Real-Time Data Pipelines: Stream & Batch Processing workshop Slide
 
What is Binary Language? Computer Number Systems
What is Binary Language?  Computer Number SystemsWhat is Binary Language?  Computer Number Systems
What is Binary Language? Computer Number Systems
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
Building a General PDE Solving Framework with Symbolic-Numeric Scientific Mac...
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Project Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanationProject Based Learning (A.I).pptx detail explanation
Project Based Learning (A.I).pptx detail explanation
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 

Hibernate 6.0 - What's new.pdf

  • 1. What’s new in Hibernate 6.0? 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. 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
  • 4. 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
  • 5. 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=?
  • 6. 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
  • 7. 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
  • 8. 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
  • 9. 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 ) );
  • 10. 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
  • 11. 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 );
  • 12. 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
  • 13. 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 .. ..
  • 14. 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
  • 15. 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
  • 16. Query improvements ILIKEpredicate support select e from Entity e where e.name ilike ‘%tony%’ Fallback to lower(e.name) like lower(‘%tony’)
  • 17. 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.
  • 18. Query improvements Session#createSelectionQueryfor select only queries ● No executeUpdatemethod Session#createMutationQueryfor mutation only queries ● No getResultList/getSingleResultetc. methods Early validations and communication of intent
  • 19. 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, …)
  • 20. 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
  • 21. 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
  • 22. 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
  • 24. 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/main/migration-guide.adoc
  • 25. 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
  • 26. Q & A