-
Notifications
You must be signed in to change notification settings - Fork 677
Spring Data 2025.1 Release Notes
-
Upgrade to Spring Framework 7
-
Upgrade to Jakarta EE 11 (JPA 3.2, Servlet 6.1)
-
Upgrade to Kotlin 2.0
-
Strong use of JPQL in JPA
-
Removal of
ListenableFuture
support
Details
-
Spring Data Build - 4.0
With Spring Framework removing support for ListenableFuture
, we’re removing support for ListenableFuture
as well. Please use CompletableFuture
when using @Async
query methods.
PersistenceConstructor Migration
-
Removal of
@PersistenceConstructor
in favor of@PersistenceCreator
-
Removal of
Parameter.hasSpelExpression()
in favor ofhasValueExpression()
. -
Removal of
PersistentEntity.getPersistenceConstructor()
in favor ofPersistentEntity.getInstanceCreatorMetadata()
andisConstructorArgument(…)
in favor ofisCreatorArgument(…)
. -
Removal of
PreferredConstructor.isConstructorParameter(…)
isCreatorParameter(…)
. -
Removal of
MappingInstantiationException.getConstructor(…)
in favor ofgetEntityCreator()
.
SpEL to Value Expression Migration
-
Removal of
DefaultSpELExpressionEvaluator
andSpELExpressionEvaluator
in favor ofValueExpressionEvaluator
. -
Removal of
SpELExpressionParameterValueProvider
in favor ofValueExpressionParameterValueProvider
. -
Removal of
ValueExpressionParameterValueProvider.potentiallyConvertSpelValue(…)
in favor ofpotentiallyConvertExpressionValue(…)
. -
Removed
ExtensionAwareQueryMethodEvaluationContextProvider
,QueryMethodEvaluationContextProvider
and their reactive variants in favor of Value Expression support.QueryMethodValueEvaluationContextAccessor.createEvaluationContextProvider(beanFactory)
can help to create default instances. -
Removed
SpelEvaluator
andSpelQueryContext
in favor ofValueExpressionQueryRewriter
QueryMethod Parameters Revision
-
Removed
QueryMethod.createParameters(Method method, TypeInformation<?> domainType)
in favor ofcreateParameters(ParametersSource parametersSource)
-
Removal of
Parameter(MethodParameter parameter)
andParameters(Method method, Function<MethodParameter, T> parameterFactory)
.
ClassUtils
and ReflectionUtils
Revision
-
Removal of
CastUtils
without replacement. Apply casting where necessary. -
Removal of
org.springframework.data.repository.util.ClassUtils
. Several methods went intoorg.springframework.data.util.ClassUtils
andReflectionUtils
.
Other Changes
-
Removal of
PersistentPropertyPath.getRequiredLeafProperty()
in favor ofgetLeafProperty()
. -
QPageRequest
constructors areprivate
now, useof
factory methods. -
Removal of
AnnotationRepositoryConfigurationSource
constructor -
Removal of
RepositoryFactorySupport.getTargetRepositoryViaReflection(…)
, useinstantiateClass(…)
instead. -
Removed
PagedResourcesAssembler.getMethodParameter(…)
without replacement -
Removed
org.springframework.data.repository.util.ReactiveWrappers
in favor of the variant in theorg.springframework.data.util
package. -
ClassTypeInformation
was made package-protected. Obtain instances ofTypeInformation
using the appropriate factory methods onTypeInformation
. -
Removal of the
org.springframework.data.type.classreading
package in favor of Spring’sAnnotationMetadata
.
15 years ago, Spring Data JPA started to see first light. Back then, it used String-based queries and eventually moved to JPA’s CriteriaQuery
API to avoid string concatenation when building queries. It has been quite a ride with the Criteria API being powerful yet restricted as Hibernate was capable of way more functionality than exposed through the Criteria API (e.g. Nulls Precedence when sorting).
A couple years into Criteria API, we started noticing a huge performance penalty using Criteria API. JPA providers have to evaluate the entire query on each query creation whereas Hibernate is able to cache queries much better when using String-based JPQL queries.
We finally decided to explore a JPQL-based approach to derived queries and we found a 3.5x improvement in running such queries. While the factor 3.5x applies to in-memory databases, a typical application can still benefit from a roughly 25% improvement in query throughput by leveraging Hibernate’s query caching.
Using an different API that has proved over 15 years bears quite some risk in breaking applications that otherwise ran fine. We need your feedback to let us know about cases that behave differently in comparison to the previous version.
With Spring Framework removing support for ListenableFuture
, we’re removing support for ListenableFuture
as well. Packages org.springframework.data.cassandra.core.cql.legacy
and o.s.d.c.core.legacy
are removed. Use asynchronous template API implementations and their utilities from o.s.d.c.core.cql
respective o.s.d.c.core
.
-
M1 - January 2025
-
M2 - March 2025
-
M3 - May 2025
-
M4 - July 2025
-
RC1 - Sept 2025
-
RC2 - Oct 2025
-
GA - Nov 2025
-
OSS Support until: May 2025
-
End of Life: Sept 2026