From 7d5593d65e1f15b60774f9136c19463d667e468c Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Thu, 12 Feb 2026 10:15:54 +0100 Subject: [PATCH] Additional tests for IS query targeting plural paths. Also needed to suppress a nullable probe false positive. Original Pull Request: #4182 --- .../repository/query/JpaResultConverters.java | 3 +- .../jpa/repository/UserRepositoryTests.java | 31 +++++++++++++++++-- .../jpa/repository/sample/UserRepository.java | 9 ++++++ 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaResultConverters.java b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaResultConverters.java index c9cfa4490..4ebe36191 100644 --- a/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaResultConverters.java +++ b/spring-data-jpa/src/main/java/org/springframework/data/jpa/repository/query/JpaResultConverters.java @@ -47,7 +47,8 @@ public final class JpaResultConverters { * * @author Thomas Darimont */ - public enum BlobToByteArrayConverter implements Converter { + @SuppressWarnings("NullAway") + public enum BlobToByteArrayConverter implements Converter { INSTANCE; diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java index a95604446..fcf050bf4 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/UserRepositoryTests.java @@ -922,6 +922,8 @@ class UserRepositoryTests { assertThat(repository.existsById(secondUser.getId())).isTrue(); assertThat(repository.existsById(thirdUser.getId())).isTrue(); assertThat(repository.existsById(fourthUser.getId())).isTrue(); + + em.clear(); } private static void assertSameElements(Collection first, Collection second) { @@ -2914,10 +2916,8 @@ class UserRepositoryTests { @Test // GH-4172 void findByFluentSpecificationWithDtoProjectionJoins() { - flushTestUsers(); firstUser.setManager(secondUser); - em.persist(firstUser); - em.flush(); + flushTestUsers(); record MyProjection(String name, int age, boolean active, String managerName, int managerAge) { } @@ -3694,6 +3694,31 @@ class UserRepositoryTests { assertThat(result).containsOnly(firstUser, secondUser); } + @Test // GH-4179 + void countOnCollectionPropertyWithIs() { + + firstUser.addColleague(secondUser); + thirdUser.addColleague(firstUser); + + flushTestUsers(); + + assertThat(repository.countByColleagues(secondUser)).isOne(); + assertThat(repository.countByColleaguesContaining(secondUser)).isOne(); + } + + @Test // GH-4179 + void countOnNestedCollectionPropertyWithIs() { + + firstUser.addColleague(secondUser); + firstUser.addColleague(thirdUser); + + secondUser.addRole(adminRole); + + flushTestUsers(); + + assertThat(repository.countByColleaguesRoles(adminRole)).isOne(); + } + @Test // GH-2593 void insertStatementModifyingQueryWorks() { flushTestUsers(); diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/sample/UserRepository.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/sample/UserRepository.java index 073bbc965..372875c90 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/sample/UserRepository.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/sample/UserRepository.java @@ -561,6 +561,15 @@ public interface UserRepository extends JpaRepository, JpaSpecifi // GH-4179 List findByRoles(Role role); + // GH-4179 + long countByColleagues(User user); + + // GH-4179 + long countByColleaguesContaining(User user); + + // GH-4179 + long countByColleaguesRoles(Role Role); + // DATAJPA-829 List findByRolesContaining(Role role);