Skip to content
CAI
Software that uses CAICheck a score

spring-projects/spring-data-jpa

53.8

Adequate · 21 September 2026

36.1k

lines of production code

Java

primary language

7

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is the Spring Data JPA project, a framework that provides repository support for JPA-based data access. It includes a newly introduced module for Hibernate Envers to manage entity revision history and query revisions. The codebase also features tooling for build standardization, static analysis, and performance benchmarking of repository query methods.

Features

Added Spring Data JPA architecture and benchmarking configuration files

This change introduces new configuration and benchmarking assets for the Spring Data JPA module. It adds a Sonargraph architecture definition file (\Spring Data JPA.sonargraph\) that defines the project's internal layering (Support, Repository, Domain, Mapping, Utilities) and external subsystem dependencies (Querydsl, Spring, Spring Data Commons), along with code quality thresholds. It also includes an AspectJ configuration file (\aop.xml\) to enable \AnnotationBeanConfigurerAspect\ for dependency injection, and a Java code formatting profile (\formatting.xml\) named "Spring Data" to standardize code style. Additionally, JMH benchmark classes (\AotRepositoryQueryMethodBenchmarks.java\ and \RepositoryQueryMethodBenchmarks.java\) are added to measure the performance of AOT-generated repository query methods against standard reflective ones.

spring-data-jpa · high confidence

Initial release of Spring Data Envers module

This change introduces the new spring-data-envers module, providing Spring Data repository support for Hibernate Envers revision history. It includes the \@EnableEnversRepositories\ annotation for configuration, core repository interfaces and implementations (\EnversRevisionRepository\, \EnversRevisionRepositoryImpl\) to query entity revisions, and support classes (\DefaultRevisionMetadata\, \ReflectionRevisionEntityInformation\) to handle both default and custom revision entities. The implementation enables paginated and sorted revision queries and integrates with the standard Spring Data repository infrastructure.

spring-data-envers · high confidence

Behavioural changes

Generated Java code now uses JSpecify nullability annotations

The ANTLR code generator template has been updated to include JSpecify annotations (such as @NullUnmarked) in the generated Java parser, listener, base listener, and visitor classes. This change improves static analysis and null-safety checking for users of the generated code by providing explicit nullability information, replacing previous approaches that may have relied on other mechanisms or lacked such annotations.

org · high confidence

Migrate build to Spring Develocity Conventions and update JVM configuration

The Maven build now integrates the Spring Develocity Conventions extension (version 0.0.26) to standardize build behavior and reporting. Additionally, the JVM configuration has been updated to include specific exports and opens for JDK compiler modules and base libraries, ensuring compatibility with the new build conventions and tooling requirements.

.mvn · high confidence

Dependencies

Spring Data JPA 4.2.0-SNAPSHOT dependency baseline and build configuration

The project dependencies and build configuration have been updated to the 4.2.0-SNAPSHOT release line. This includes upgrading the core Spring Data Commons dependency to 4.2.0-SNAPSHOT, setting the default Hibernate version to 7.4.9.Final, and updating EclipseLink to 5.0.1. Test infrastructure dependencies have also been refreshed, including H2 to 2.5.250, PostgreSQL JDBC driver to 42.7.13, MySQL JDBC driver to 26.7.0, Oracle JDBC driver to 23.26.3.0.0, and JSqlParser to 5.4. The build now supports testing against Hibernate 8.0.0.Beta1 and 8.1.0-SNAPSHOT via dedicated profiles, and includes Testcontainers support for MySQL, PostgreSQL, and Oracle.

(dependencies) · high confidence

Upgrade Maven Wrapper to version 3.9.16

The Maven Wrapper configuration has been updated to use Maven distribution version 3.9.16. This ensures that builds executed via the wrapper will consistently use this specific Maven version, improving reproducibility and potentially providing access to the latest features and bug fixes available in that release.

.mvn/wrapper · high confidence

Housekeeping

Repository initialization with standard project scaffolding

The repository has been initialized with essential project files, including a .gitignore configuration to exclude build artifacts and IDE settings, a Maven wrapper (mvnw/mvnw.cmd) to ensure consistent builds, and standard documentation files such as README.adoc, CONTRIBUTING.adoc, CI.adoc, and SECURITY.adoc. The project is licensed under the Apache License 2.0, and obsolete placeholder files have been removed.

(repo-wide) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 61 → 54 (-7.4)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 88 (-11.7)
  • Architecture 92 → 63 (-29.3)
  • Maturity 49 → 49 (+0.1)
  • Readiness 65 → 60 (-5.6)
  • Security 67 → 51 (-15.4)

Resolved (26)

  • Change coupling clique: EqlQueryIntrospector.java, HqlQueryIntrospector.java, JpqlQueryIntrospector.java (spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlQueryIntrospector.java)
  • Change coupling: DeleteSpecification.java ↔ UpdateSpecification.java (spring-data-jpa/src/main/java/org/springframework/data/jpa/domain/DeleteSpecification.java)
  • Change coupling: EqlCountQueryTransformer.java ↔ HqlCountQueryTransformer.java (spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlCountQueryTransformer.java)
  • Change coupling: EqlCountQueryTransformer.java ↔ JpqlCountQueryTransformer.java (spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlCountQueryTransformer.java)
  • Change coupling: EqlCountQueryTransformer.java ↔ JpqlSortedQueryTransformer.java (spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlCountQueryTransformer.java)
  • Change coupling: EqlSortedQueryTransformer.java ↔ HqlSortedQueryTransformer.java (spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlSortedQueryTransformer.java)
  • Change coupling: EqlSortedQueryTransformer.java ↔ JpqlSortedQueryTransformer.java (spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlSortedQueryTransformer.java)
  • Change coupling: JpaRepositoryContributor.java ↔ StringAotQuery.java (spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/aot/JpaRepositoryContributor.java)
  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • Duplicated block (9 lines × 2) (spring-data-envers/src/main/java/org/springframework/data/envers/repository/support/EnversRevisionRepositoryImpl.java)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • Medium: security finding (details withheld)
  • …and 6 more

New (707)

  • Change coupling: FetchableFluentQueryByPredicate.java ↔ SimpleJpaRepository.java (spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/support/FetchableFluentQueryByPredicate.java)
  • Change coupling: HqlCountQueryTransformer.java ↔ JpqlCountQueryTransformer.java (spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlCountQueryTransformer.java)
  • Change coupling: HqlSortedQueryTransformer.java ↔ JpqlSortedQueryTransformer.java (spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlSortedQueryTransformer.java)
  • Change coupling: JpaPersistentEntityImpl.java ↔ JpaPersistentPropertyImpl.java (spring-data-jpa/src/main/java/org/springframework/data/jpa/mapping/JpaPersistentEntityImpl.java)
  • Change-coupling hub: EqlSortedQueryTransformer.java → HqlQueryRenderer.java, HqlSortedQueryTransformer.java, JpqlCountQueryTransformer.java, JpqlSortedQueryTransformer.java (spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlSortedQueryTransformer.java)
  • ClassTooLong: EqlQueryRenderer (spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlQueryRenderer.java)
  • ClassTooLong: HqlOrderExpressionVisitor (spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlOrderExpressionVisitor.java)
  • ClassTooLong: HqlQueryRenderer (spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/HqlQueryRenderer.java)
  • ClassTooLong: JpaCodeBlocks (spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/aot/JpaCodeBlocks.java)
  • ClassTooLong: JpqlQueryBuilder (spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlQueryBuilder.java)
  • ClassTooLong: JpqlQueryRenderer (spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpqlQueryRenderer.java)
  • ClassTooLong: SimpleJpaRepository (spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/support/SimpleJpaRepository.java)
  • Coverage not measured — no coverage collector is wired up
  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • Documentation: no installation or build instructions (README.adoc)
  • Documentation: no usage examples (README.adoc)
  • Duplicated block (10 lines × 2) (spring-data-envers/src/main/java/org/springframework/data/envers/repository/support/EnversRevisionRepositoryImpl.java)
  • Duplicated block (10 lines × 2) (spring-data-jpa/src/main/java/org/springframework/data/jpa/domain/DeleteSpecification.java)
  • Duplicated block (10 lines × 2) (spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlQueryRenderer.java)
  • Duplicated block (10 lines × 2) (spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/EqlQueryRenderer.java)
  • …and 687 more

Changes since last survey

  • 41 commits — 41 feature/other, 0 fixes

By area

  • spring-data-jpa/src — 23 commits
  • (root) — 12 commits
  • (repo) — 2 commits
  • .github/workflows — 1 commit
  • .mvn/extensions.xml — 1 commit
  • spring-data-envers/src — 1 commit
  • spring-data-jpa/pom.xml — 1 commit

Notable commits

  • change: Adapt JSqlParserQueryEnhancer to changes in JSqlParser 5.4.
  • change: Adapt to changes in Spring Framework.
  • change: Adapt to latest Hibernate 8 changes.
  • change: Add a binary-compatible Jakarta Persistence query adapter.
  • change: Add release train automation.
  • change: Allow CAST as property (state field) name in EQL.
  • change: Allow PERCENT in the HQL fetch clause.
  • change: Allow to build against Hibernate 8.0.
  • change: Apply ORDER BY only to the outermost query for parenthesized HQL set operations.
  • change: Avoid deprecated API in generated code.
  • change: Avoid double parsing on failure when using JSqlParser.
  • change: Consolidate JPQL/EQL/HQL tests.
  • change: Enter rampdown phase for 4.2.0-M1.
  • change: Enter rampdown phase for 4.2.0-M2.
  • change: Exclude AspectJ builddef.lst from published JARs.
  • change: Extend pattern to cover unicode characters.
  • change: Introduce version-specific Hibernate adapters.
  • change: Isolate focused tests from shared XML mappings.
  • change: Polishing.
  • change: Polishing.
  • …and 21 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

spring-projects/spring-data-jpa was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 97f99da01a00348541fb1980004866c5439aafa2 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-b84573e22831.