-
Notifications
You must be signed in to change notification settings - Fork 677
Spring Data 2022.0 (Turing) Release Notes (Preview)
-
Upgrade to Java 17 baseline
-
Upgrade to Spring Framework 6
-
Upgrade to Jakarta EE 9
-
Ship Ahead-of-Time processing and reflection hints for Graal Native Image compilation
-
Refine repository interface arrangement
-
Merge of Spring Data Envers into Spring Data JPA repository
-
Merge of Spring Data R2DBC into Spring Data Relational repository
Details
-
Spring Data Build - 3.0
Spring Data now requires Java 17 as a baseline. All code is being compiled using Java 17 bytecode.
Spring Data now compiles against Jakarta EE 9 and the jakarta.
packages instead of javax.
(e.g. jakarta.persistence
instead of javax.persistence
).
Spring Data offers new variants of the CRUD repositories. These return a List for methods that return multiple entities:
-
ListCrudRepository
-
ListQuerydslPredicateExecutor
-
ListQueryByExampleExecutor
They can be used as a drop in replacement for the interfaces of same name but without the List
prefix.
Sorting repositories no longer extend their respective CRUD repository. If one requires the old behaviour one must extend not only the sorting repository, but also the respective CRUD repository explicitly. This was done so the sorting support can easily be combined with the List repositories introduced above.
The affected interfaces are:
-
PagingAndSortingRepository
no longer extendsCrudRepository
-
ReactiveSortingRepository
no longer extendsReactiveCrudRepository
-
CoroutineSortingRepository
no longer extendsCoroutineCrudRepository
-
RxJavaSortingRepository
no longer extendsRxJavaCrudRepository
Joda Time and ThreeTenBackport are no longer supported for temporal type conversions and general operations such as auditing. Please use Java’s built-in JSR-310 time types from the java.time
package.
RxJava 1 and 2 types are no longer supported when declaring reactive repository declarations. Please use either Project Reactor of RxJava 3 instead.
@SortDefault
is now repeatable and can be used multiple times without container annotation. Annotation attributes are evaluated through MergedAnnotations
allowing the usage of meta-annotations and leveraging attribute aliasing.
API that was removed:
-
EntityInstantiator
in theo.s.d.convert
package. Use the entity instantiators in theo.s.d.mapping.model
as replacement. -
PageableExecutionUtils
in theo.s.d.repository.support
package. The utility was moved into theo.s.d.support
package. -
Removal (or encapsulation) of various deprecated methods or constructors, such as
Lazy
constructor, methods onReactiveWrappers
and others.
Spring Data JPA is now built against Hibernate 6. For issues to expect, have a look at this ticket.
When you use an ignoreCase
operator, whether that’s with standard finders, JSqlParser, Querydsl, or Query by Example, all will lower
the selected column, so you only need to maintain one index. If you currently have an index built for upper
, you can either remove it or replace it with a proper one.
With the introduction of BeforeConvertCallback
and BeforeConvertEvent
those should have been used for Id generation for new aggregates which don’t get an id from the database. By accident it was still possible to use BeforeSaveCallback
or the respective event for this purpose. We from now on only support BeforeConvertCallback
and BeforeConvertEvent
for this purpose.
Since at the time of the M4 release only snapshot releases of mybatis-spring 2.1 are available we decided to downgrade to 2.0.7. for the M4 release. Unfortunately that release is not compatible with the current milestone of Spring Framework and therefore the MyBatis integration is broken. If you want to use MyBatis with this release, manually add a dependency to mybatis-spring 2.1.0-SNAPSHOT.
The build now verifies compatibility against MongoDB Server 6.0 using MongoDB Driver 4.7.
Methods on the MongoTemplate
API allowing streaming-oriented result consumption for find
and aggregate
operations now return a Java 8 Stream
to simplify result consumption as a stream. Previously, these methods returned CloseableIterator
. Note that the returned Stream
must be closed so consumption with try-with-resources
can be used in these cases:
try (Stream<Person> stream = mongoTemplate.stream(query, Person.class)) {
// consume stream
}
The CassandraMappingContext
bean is now renamed to cassandraMappingContext
from previously cassandraMapping
for a consistent naming scheme across all Spring Data modules. This change is also reflected when using the XML Namespace configuration.
Provide read/write customization hooks for GenericJackson2JsonRedisSerializer
and Jackson2JsonRedisSerializer
Both Jackson serializers can now be customized with reading and write functions to allow for improved serialization behavior. A use-case for customization is to use JSON views for serialization to limit the properties to serialize.
GenericJackson2JsonRedisSerializer serializer = new GenericJackson2JsonRedisSerializer(new ObjectMapper(),
JacksonObjectReader.create(), (mapper, source) -> {
return mapper.writerWithView(…).writeValueAsBytes(source);
});
We’ve upgraded to Jedis 4 as part of the dependency revision. Jedis 4 has reorganized its package structure, so an upgrade required breaking changes within the Jedis integration components. Jedis 4 imposes a limitation: Pipelining can no longer be used together with transactions. Code can either use pipelining or transactions but not both. The documentation contains details regarding Feature Availability across Redis Connectors.
For quite a while we planned to deprecate our own org.springframework.data.redis.connection.RedisZSetCommands.Range
type in favor of Spring Data Commons' Range
type to avoid code duplications. We also had several types such as Aggregate
or Tuple
that were heavily bound to RedisZSetCommands
while these were also used in other parts of the framework. We refactored some of the types to top-level types and updated existing method signatures.
We also removed long-deprecated code such as LettucePool
, the Version
type, and AuthenticatingRedisClient
. You can find details about the deprecated classes and their replacement in the reference documentation.
-
M1 - Jan 14, 2022
-
M2/M3 - Mar 18, 2022
-
M4 - May 13, 2022
-
M5 - Jul 15, 2022
-
M6 - Sept 16, 2022
-
RC1 - Oct 14, 2022
-
GA - Nov 18, 2022
-
OSS Support until: tbd
-
End of Life: tbd.