📗 Links
⭐ New Features
- Add support for returning
Streamablefrom AOT repository methods #4070 - Consistently use
InvalidDataAccessApiUsageExceptionforJpaOrdervalidation #4062 - Remove deprecated API that is marked for removal #4057
- Revise
PredicateSpecificationfor improved reuse #4035 - Text block queries are stored twice in hibernate HQL interpretation cache #4034
- Add
TypeCollectorFiltersto filter$$_hibernatefields and methods #4014 - Allow customization of
@RevisionTimestampproperty name #4003 - Reintroduce Specification.where(Specification) #3998
- Add possbility to return Entity from
delete<...>ById(id: MyId)method #3995 - Reintroduce
Specification.where(Specification)#3992 - Backport
Specification.unrestricted()to3.5.x#3942 - Replace regex with startsWith / endsWith check for LIKE pattern detection #3932
- Deprecate
SharedEntityManagerbean registration in favor of JPA 3.2 qualifiedEntityManagerinjection #3926 - Remove unnecessary join when filtering on relationship id #3922
- Enable AOT repository generation by default #3904
- Make identification variables and the
SELECTclause in JPQL optional #3903 - Make identification variables and the
SELECTclause in JPQL optional #3902 - Enable AOT repositories by default #3899
- Avoid early
EntityManagerinitialization duringPersistenceProviderlookup #3885 - Add support for JSON and XML Set-Returning-Functions #3883
- Support HQL
LIMIT/OFFSETwithout ordering #3882 - Add support for Set-Returning Functions (SRF) in HQL parser #3879
- Add
delete(Predicate)toQuerydslJpaPredicateExecutor#3878 - Add
delete(Predicate)toQuerydslJpaPredicateExecutor#3877 - Use isolated Hibernate
EntityManagerfor AOT contribution #3876 - Use
LocalVariableNameFactoryin repository contributor #3875 - Provide
JpaRepositoryFragmentsContributorin JPA Repository Factory and Repository Factory Bean #3874 - Explore Search Results #3868
- Add support for Hibernate 7 Set-returning Functions in
fromClause #3864 - Use parameter names in derived JPQL queries #3857
- Capture
@EnableJpaRepositoriesconfiguration for AOT processing #3838 - Add support for JPA AOT Repositories #3830
- Migrate to JSpecify annotations for nullability constraints #3781
- Migrate to JSpecify annotations for nullability constraints #3745
- Remove commons-logging exclusion #3736
- Support custom countSpec in SimpleJpaRepository.findAll #3727
- Switch to JPA 3.2
Query.getSingleResultOrNull()#3701 - Upgrade to JPA 3.2 #3695
- Adopt to deprecation removals in Commons #3683
- Replace derived
CriteriaQuerywith String-based queries #3653 - Refactor
DeclaredQueryto decouple the query definition from its introspected state #3622 - Replace derived
CriteriaQuerywith String-based JPQL queries #3588 - Consider
NULLSprecedence usingSortfor Criteria Queries #3587 - Refine Specification API #3578
- Introduce
QueryEnhancerSelectorto configure whichQueryEnhancerFactoryto use #3527 - Revise Specification API #3521
- Use provider built-in result count to reuse query if possible #3456
- Prevent early
EntityManageraccess to avoid conflicts with Hibernate-native multi-tenancy #3425 - Skip
JOINfor predicates that compare the primary key of a@ManyToOnerelationship #3349 - java.lang.IllegalStateException is thrown by invoking findBy method #3294
- Make JpaSort.unsafe() operational for HQL, EQL, and JPQL #3187
- Translate
JpaSort.unsafe(…)used with Specifications to order-byExpression#3172 - Update JPQL and HQL parsers with newly introduced JPA 3.2 keywords #3136
- Allow customization of
@RevisionTimestampproperty name #2850 - Improve query method validation exceptions for declared queries #2738
- Avoid re-wrapping query validation exceptions into
IllegalArgumentExceptionit they already are one #2736 - Move
PropertyPathandTypeInformationtypes tocorepackage #3393 - Refine AOT Repositories infrastructure #3267
🐞 Bug Fixes
JpqlQueryBuilderdoes not consider@Entityname #4036- Generated JPQL uses non-standard fully-qualified entity names #4032
- Evaluate entity name for
StringAotQueryfromEntityMetadata#4030 - StringAotQuery should evaluate entity name from EntityMetadata #4029
- Consistent handling of
Specification.unrestricted()inSpecification.not(..)#4024 - Inconsistency in
Specification.unrestricted()semantics #4023 deleteByreturning primitive number queries fail withClassCastException#4015- EQL Parser fails using nested aggregation function arguments #4013
- HQL Renderer renders CTE with
CYCLEwithout space betweenSETandidentifier#4012 - Fix unpaged revision query #4000
- Revision repository
findRevisionsthrows exception when usingPageable.unpaged()#3999 - JPQL
/* ... */comments in@Queryfail to parse when migrating from Spring Boot 3.3.5 to Spring Boot 3.5.5 / Spring Data JPA (HQL parser mismatch on/) #3997 - Qualify identifier used in
SimpleJpaRepository.deleteAllByIdInBatch(…)JPQL #3993 - EclipseLink fails resolving unqualified identifier property using
INon batch delete by Id #3990 - Joins with identical property names are not rendered by
JpqlQueryBuilder#3989 - Type Constraint Mismatch in
QueryByExampleExecutor.findBy()#3986 - Optimized
QueryUtils.applyAndBind(…)usingIN(entities)does not work with EclipseLink #3983 ExpressionBasedStringQuerydoes not expand#{#entityName}for native queries #3979- Add missing
@Nullableannotations toJpaSpecificationExecutor.findBy(…)#3974 - Returning Converted entity properties cause DTO projection rewrite #3929
PersistenceProvider.fromEntityManagerFactory(…)throwsNullPointerExceptionusing Hotswap Agent #3923QueryUtilsfails to detect aliases whenSELECTitems are comma-separated without spaces #3911JpaSpecificationExecutor.findBy(…)returns join product of nested relations #3908- Postgresql jsonb operator
?|erroneously detected as parameter bind marker #3907 - DTO query rewriting renders invalid queries #3895
- EQL parser fails to parse
LIKEwithESCAPEclause #3873 - Removes PlainSelect casting #3870
JSqlParserQueryEnhancerfails withClassCastExceptionduring query introspection #3869- JPQL and EQL parser reject
CASTfunction #3863 - DTO Projection rewriting rewrites queries returning properties to DTO form #3862
- Fix handling of null predicate in Specification.not() #3856
Specification.not()fails withNullPointerExceptionwhen otherSpecificationreturnsnull#3849QueryRewriternot applied to count queries #3801
📔 Documentation
- Update Documentation for Release #4066
- Update Documentation #4065
- Fix typos #4033
- Fix typo in javadoc #3955
- doc: fix typo in README.adoc #3953
- Fix typos in query-methods.adoc #3912
- Update documentation #3384
- Document placeholder and Ant-style pattern support for
@Enable…Repositories#3366 - Refine version properties for documentation build #2638
🔨 Dependency Upgrades
- Upgrade to jMolecules 2025.0.0 BOM #4076
- Upgrade to Hibernate 7.1.7.Final #4074
- Upgrade JDBC test driver dependencies #4064
- Upgrade to Hibernate 7.1.5.Final #4063
- Upgrade to Eclipselink 5.0.0-B11 #4045
- Upgrade to Hibernate 7.1.4.Final #4044
- Upgrade to Hibernate 7.1.1.Final #4016
- Upgrade to Eclipselink 5.0.0-B10 #4006
- Upgrade to Hibernate 7.1.0.Final #3969
- Upgrade to Hibernate 7.1.0.CR2 #3964
- Upgrade to Maven Wrapper 3.9.11 #3945
- Upgrade to Eclipselink 5.0.0-B09 #3939
- Upgrade to JSqlparser 5.3 #3938
- Upgrade to Hibernate 7.0.6.Final #3933
- Upgrade to Hibernate 7.0.3.Final #3925
- Upgrade to PGJDBC Driver 42.7.7 #3914
- Upgrade to Hibernate 7.0.0 #3896
- Upgrade to Hibernate 7.0 CR2 #3887
- Upgrade to Oracle OJDBC 23.8.0.25.04 #3881
- Upgrade to Eclipselink 5.0.0-B07 #3837
- Upgrade to Hibernate 7.0.0.Beta5 #3836
- Upgrade to Hibernate 7.0 Beta3 #3723
- Upgrade to JPA 3.2 #3673
- Upgrade to Eclipselink 5.0.0-B05 #3672
- Upgrade to Hibernate 7.0 Beta1 #3671
- Upgrade to Testcontainers 2.0 #2688
❤️ Contributors
We'd like to thank all the contributors who worked on this release!