From 688e492c8e0325c718f4a6127d6a1f5c563ff8ba Mon Sep 17 00:00:00 2001 From: "Greg L. Turnquist" Date: Wed, 31 May 2023 15:23:06 -0500 Subject: [PATCH 1/2] Create a branch. --- pom.xml | 2 +- spring-data-envers/pom.xml | 4 ++-- spring-data-jpa-distribution/pom.xml | 2 +- spring-data-jpa/pom.xml | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 91916af9b9..75ffed0993 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-jpa-parent - 3.2.0-SNAPSHOT + 3.2.0-gh-java21-SNAPSHOT pom Spring Data JPA Parent diff --git a/spring-data-envers/pom.xml b/spring-data-envers/pom.xml index 0c3d16ef85..6645d1eddd 100755 --- a/spring-data-envers/pom.xml +++ b/spring-data-envers/pom.xml @@ -5,12 +5,12 @@ org.springframework.data spring-data-envers - 3.2.0-SNAPSHOT + 3.2.0-gh-java21-SNAPSHOT org.springframework.data spring-data-jpa-parent - 3.2.0-SNAPSHOT + 3.2.0-gh-java21-SNAPSHOT ../pom.xml diff --git a/spring-data-jpa-distribution/pom.xml b/spring-data-jpa-distribution/pom.xml index 991cd8cbf0..a52529e536 100644 --- a/spring-data-jpa-distribution/pom.xml +++ b/spring-data-jpa-distribution/pom.xml @@ -14,7 +14,7 @@ org.springframework.data spring-data-jpa-parent - 3.2.0-SNAPSHOT + 3.2.0-gh-java21-SNAPSHOT ../pom.xml diff --git a/spring-data-jpa/pom.xml b/spring-data-jpa/pom.xml index 7145881fb0..9289b841ca 100644 --- a/spring-data-jpa/pom.xml +++ b/spring-data-jpa/pom.xml @@ -6,7 +6,7 @@ org.springframework.data spring-data-jpa - 3.2.0-SNAPSHOT + 3.2.0-gh-java21-SNAPSHOT Spring Data JPA Spring Data module for JPA repositories. @@ -15,7 +15,7 @@ org.springframework.data spring-data-jpa-parent - 3.2.0-SNAPSHOT + 3.2.0-gh-java21-SNAPSHOT ../pom.xml From 0f34ef4a4a0f36b07cf4fac6b539fe37484f1f89 Mon Sep 17 00:00:00 2001 From: "Greg L. Turnquist" Date: Tue, 23 May 2023 12:14:40 -0500 Subject: [PATCH 2/2] Test against Java 21 on CI. To make this code work with Java 21, delombok the test suite. Original Pull Request: #2993 --- Jenkinsfile | 2 +- ci/pipeline.properties | 4 +- .../data/envers/sample/AbstractEntity.java | 4 +- .../data/envers/sample/Country.java | 10 +- .../data/envers/sample/License.java | 27 ++++-- .../jpa/domain/sample/AbstractMappedType.java | 9 +- .../jpa/domain/sample/EmployeeWithName.java | 30 ++++-- .../data/jpa/domain/sample/Item.java | 33 +++++-- .../SampleWithIdClassIncludingEntity.java | 71 ++++++++++++-- .../domain/sample/UserWithOptionalField.java | 30 ++++-- .../jpa/repository/UserRepositoryTests.java | 38 ++++++-- .../MySqlStoredProcedureIntegrationTests.java | 56 +++++++++-- ...stgresStoredProcedureIntegrationTests.java | 54 +++++++++-- ...ProcedureNullHandlingIntegrationTests.java | 48 ++++++++-- .../ProjectionJoinIntegrationTests.java | 72 ++++++++++++-- .../ProjectionsIntegrationTests.java | 93 ++++++++++++++++--- ...rIndexedQueryParameterSetterUnitTests.java | 27 +++++- ...odelEntityInformationIntegrationTests.java | 49 +++++++++- ...PersistableEntityInformationUnitTests.java | 11 ++- ...QuerydslJpaPredicateExecutorUnitTests.java | 19 +++- 20 files changed, 575 insertions(+), 112 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 415311f002..3759ab7607 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -48,7 +48,7 @@ pipeline { when { beforeAgent(true) allOf { - branch(pattern: "main|(\\d\\.\\d\\.x)", comparator: "REGEXP") + branch(pattern: "issue/gh-java21|main|(\\d\\.\\d\\.x)", comparator: "REGEXP") not { triggeredBy 'UpstreamCause' } } } diff --git a/ci/pipeline.properties b/ci/pipeline.properties index 2f45263dbc..026fdcb58b 100644 --- a/ci/pipeline.properties +++ b/ci/pipeline.properties @@ -1,10 +1,10 @@ # Java versions java.main.tag=17.0.6_10-jdk-focal -java.next.tag=20-jdk-jammy +java.next.tag=21-jdk-bullseye # Docker container images - standard docker.java.main.image=harbor-repo.vmware.com/dockerhub-proxy-cache/library/eclipse-temurin:${java.main.tag} -docker.java.next.image=harbor-repo.vmware.com/dockerhub-proxy-cache/library/eclipse-temurin:${java.next.tag} +docker.java.next.image=harbor-repo.vmware.com/dockerhub-proxy-cache/library/openjdk:${java.next.tag} # Supported versions of MongoDB docker.mongodb.4.4.version=4.4.18 diff --git a/spring-data-envers/src/test/java/org/springframework/data/envers/sample/AbstractEntity.java b/spring-data-envers/src/test/java/org/springframework/data/envers/sample/AbstractEntity.java index caf5355dec..231bc18842 100644 --- a/spring-data-envers/src/test/java/org/springframework/data/envers/sample/AbstractEntity.java +++ b/spring-data-envers/src/test/java/org/springframework/data/envers/sample/AbstractEntity.java @@ -15,15 +15,13 @@ */ package org.springframework.data.envers.sample; -import lombok.EqualsAndHashCode; - import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import jakarta.persistence.MappedSuperclass; @MappedSuperclass -@EqualsAndHashCode abstract class AbstractEntity { public @Id @GeneratedValue Long id; + } diff --git a/spring-data-envers/src/test/java/org/springframework/data/envers/sample/Country.java b/spring-data-envers/src/test/java/org/springframework/data/envers/sample/Country.java index f974349488..932b1a99c2 100755 --- a/spring-data-envers/src/test/java/org/springframework/data/envers/sample/Country.java +++ b/spring-data-envers/src/test/java/org/springframework/data/envers/sample/Country.java @@ -17,11 +17,10 @@ import jakarta.persistence.Entity; -import lombok.ToString; -import org.hibernate.envers.Audited; - import java.time.Instant; +import org.hibernate.envers.Audited; + /** * Sample domain class. * @@ -31,7 +30,6 @@ */ @Audited @Entity -@ToString public class Country extends AbstractEntity { public String code; @@ -39,4 +37,8 @@ public class Country extends AbstractEntity { public Instant timestamp; public String name; + + public String toString() { + return "Country(code=" + this.code + ", timestamp=" + this.timestamp + ", name=" + this.name + ")"; + } } diff --git a/spring-data-envers/src/test/java/org/springframework/data/envers/sample/License.java b/spring-data-envers/src/test/java/org/springframework/data/envers/sample/License.java index 32ccae2967..efae0b6e86 100755 --- a/spring-data-envers/src/test/java/org/springframework/data/envers/sample/License.java +++ b/spring-data-envers/src/test/java/org/springframework/data/envers/sample/License.java @@ -15,12 +15,13 @@ */ package org.springframework.data.envers.sample; -import java.util.Set; - import jakarta.persistence.Entity; import jakarta.persistence.ManyToMany; import jakarta.persistence.Version; +import java.util.Objects; +import java.util.Set; + import org.hibernate.envers.Audited; /** @@ -32,10 +33,24 @@ @Entity public class License extends AbstractEntity { - @Version - public Integer version; + @Version public Integer version; public String name; - @ManyToMany - public Set laender; + @ManyToMany public Set laender; + + @Override + public boolean equals(Object o) { + + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + License license = (License) o; + return Objects.equals(version, license.version) && Objects.equals(name, license.name); + } + + @Override + public int hashCode() { + return Objects.hash(version, name); + } } diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/domain/sample/AbstractMappedType.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/domain/sample/AbstractMappedType.java index 0cf8abfe72..2de5e01cc5 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/domain/sample/AbstractMappedType.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/domain/sample/AbstractMappedType.java @@ -15,8 +15,6 @@ */ package org.springframework.data.jpa.domain.sample; -import lombok.Getter; - import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import jakarta.persistence.MappedSuperclass; @@ -29,7 +27,8 @@ @MappedSuperclass public abstract class AbstractMappedType { - @Id @GeneratedValue @Getter Long id; + @Id + @GeneratedValue Long id; @Version Long version; private String attribute1; @@ -38,4 +37,8 @@ public abstract class AbstractMappedType { AbstractMappedType(String attribute1) { this.attribute1 = attribute1; } + + public Long getId() { + return this.id; + } } diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/domain/sample/EmployeeWithName.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/domain/sample/EmployeeWithName.java index ddcb19e0c5..bf0e74772e 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/domain/sample/EmployeeWithName.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/domain/sample/EmployeeWithName.java @@ -18,20 +18,16 @@ import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; -import lombok.AccessLevel; -import lombok.Data; -import lombok.NoArgsConstructor; /** * @author Greg Turnquist */ @Entity -@NoArgsConstructor(access = AccessLevel.PROTECTED) -@Data public class EmployeeWithName { @Id - @GeneratedValue private Integer id; + @GeneratedValue // + private Integer id; private String name; public EmployeeWithName(String name) { @@ -39,4 +35,26 @@ public EmployeeWithName(String name) { this(); this.name = name; } + + protected EmployeeWithName() {} + + public Integer getId() { + return this.id; + } + + public String getName() { + return this.name; + } + + public void setId(Integer id) { + this.id = id; + } + + public void setName(String name) { + this.name = name; + } + + public String toString() { + return "EmployeeWithName(id=" + this.getId() + ", name=" + this.getName() + ")"; + } } diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/domain/sample/Item.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/domain/sample/Item.java index 38c6b83b04..664395f9f3 100755 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/domain/sample/Item.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/domain/sample/Item.java @@ -21,8 +21,8 @@ import jakarta.persistence.IdClass; import jakarta.persistence.JoinColumn; import jakarta.persistence.Table; -import lombok.EqualsAndHashCode; -import lombok.ToString; + +import java.util.Objects; /** * @author Mark Paluch @@ -32,13 +32,13 @@ @Entity @Table @IdClass(ItemId.class) -@EqualsAndHashCode -@ToString public class Item { - @Id @Column(columnDefinition = "INT") private Integer id; + @Id + @Column(columnDefinition = "INT") private Integer id; - @Id @JoinColumn(name = "manufacturer_id", columnDefinition = "INT") private Integer manufacturerId; + @Id + @JoinColumn(name = "manufacturer_id", columnDefinition = "INT") private Integer manufacturerId; private String name; @@ -72,4 +72,25 @@ public void setName(String name) { this.name = name; } + @Override + public boolean equals(Object o) { + + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + Item item = (Item) o; + return Objects.equals(id, item.id) && Objects.equals(manufacturerId, item.manufacturerId) + && Objects.equals(name, item.name); + } + + @Override + public int hashCode() { + return Objects.hash(id, manufacturerId, name); + } + + public String toString() { + return "Item(id=" + this.getId() + ", manufacturerId=" + this.getManufacturerId() + ", name=" + this.getName() + + ")"; + } } diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/domain/sample/SampleWithIdClassIncludingEntity.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/domain/sample/SampleWithIdClassIncludingEntity.java index 4dc08b50cf..0d28b4cfd9 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/domain/sample/SampleWithIdClassIncludingEntity.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/domain/sample/SampleWithIdClassIncludingEntity.java @@ -1,14 +1,12 @@ package org.springframework.data.jpa.domain.sample; -import lombok.Data; - -import java.io.Serializable; - import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.persistence.IdClass; import jakarta.persistence.ManyToOne; +import java.io.Serializable; + /** * Sample class for integration testing * {@link org.springframework.data.jpa.repository.support.JpaMetamodelEntityInformation}. @@ -17,24 +15,81 @@ */ @Entity @IdClass(SampleWithIdClassIncludingEntity.SampleWithIdClassPK.class) -@Data public class SampleWithIdClassIncludingEntity { @Id Long first; - @ManyToOne @Id OtherEntity second; + @ManyToOne + @Id OtherEntity second; + + public SampleWithIdClassIncludingEntity() {} + + public Long getFirst() { + return this.first; + } + + public OtherEntity getSecond() { + return this.second; + } + + public void setFirst(Long first) { + this.first = first; + } + + public void setSecond(OtherEntity second) { + this.second = second; + } + + public String toString() { + return "SampleWithIdClassIncludingEntity(first=" + this.getFirst() + ", second=" + this.getSecond() + ")"; + } - @Data @SuppressWarnings("serial") public static class SampleWithIdClassPK implements Serializable { Long first; Long second; + + public SampleWithIdClassPK() {} + + public Long getFirst() { + return this.first; + } + + public Long getSecond() { + return this.second; + } + + public void setFirst(Long first) { + this.first = first; + } + + public void setSecond(Long second) { + this.second = second; + } + + public String toString() { + return "SampleWithIdClassIncludingEntity.SampleWithIdClassPK(first=" + this.getFirst() + ", second=" + + this.getSecond() + ")"; + } } @Entity - @Data public static class OtherEntity { @Id Long otherId; + + public OtherEntity() {} + + public Long getOtherId() { + return this.otherId; + } + + public void setOtherId(Long otherId) { + this.otherId = otherId; + } + + public String toString() { + return "SampleWithIdClassIncludingEntity.OtherEntity(otherId=" + this.getOtherId() + ")"; + } } /** diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/domain/sample/UserWithOptionalField.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/domain/sample/UserWithOptionalField.java index f38eeae33f..9cc8d67b15 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/domain/sample/UserWithOptionalField.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/domain/sample/UserWithOptionalField.java @@ -15,24 +15,22 @@ */ package org.springframework.data.jpa.domain.sample; -import lombok.Data; - -import java.util.Optional; - import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; +import java.util.Optional; + import org.springframework.lang.Nullable; /** * @author Greg Turnquist */ @Entity -@Data public class UserWithOptionalField { - @Id @GeneratedValue private Long id; + @Id + @GeneratedValue private Long id; private String name; private String role; @@ -57,4 +55,24 @@ public Optional getRole() { public void setRole(Optional role) { this.role = role.orElse(null); } + + public Long getId() { + return this.id; + } + + public String getName() { + return this.name; + } + + public void setId(Long id) { + this.id = id; + } + + public void setName(String name) { + this.name = name; + } + + public String toString() { + return "UserWithOptionalField(id=" + this.getId() + ", name=" + this.getName() + ", role=" + this.getRole() + ")"; + } } 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 844e2ec9fa..c8404af3c6 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 @@ -31,7 +31,6 @@ import jakarta.persistence.criteria.CriteriaQuery; import jakarta.persistence.criteria.Predicate; import jakarta.persistence.criteria.Root; -import lombok.Data; import java.util.ArrayList; import java.util.Arrays; @@ -56,8 +55,6 @@ import org.springframework.dao.IncorrectResultSizeDataAccessException; import org.springframework.dao.InvalidDataAccessApiUsageException; import org.springframework.data.domain.*; -import org.springframework.data.domain.ExampleMatcher.GenericPropertyMatcher; -import org.springframework.data.domain.ExampleMatcher.StringMatcher; import org.springframework.data.domain.Sort.Direction; import org.springframework.data.domain.Sort.Order; import org.springframework.data.jpa.domain.Specification; @@ -1300,9 +1297,8 @@ void scrollByExampleKeysetBackward() { q -> q.limit(4).sortBy(Sort.by("firstname", "emailAddress")).scroll(ScrollPosition.keyset())); KeysetScrollPosition scrollPosition = (KeysetScrollPosition) firstWindow.positionAt(2); - Window previousWindow = repository.findBy(example, - q -> q.limit(1).sortBy(Sort.by("firstname", "emailAddress")) - .scroll(ScrollPosition.backward(scrollPosition.getKeys()))); + Window previousWindow = repository.findBy(example, q -> q.limit(1) + .sortBy(Sort.by("firstname", "emailAddress")).scroll(ScrollPosition.backward(scrollPosition.getKeys()))); assertThat(previousWindow).containsOnly(jane2); assertThat(previousWindow.hasNext()).isTrue(); @@ -2477,9 +2473,22 @@ void findByFluentExampleWithSortedInterfaceBasedProjection() { @Test // GH-2294 void fluentExamplesWithClassBasedDtosNotYetSupported() { - @Data class UserDto { String firstname; + + public UserDto() {} + + public String getFirstname() { + return this.firstname; + } + + public void setFirstname(String firstname) { + this.firstname = firstname; + } + + public String toString() { + return "UserDto(firstname=" + this.getFirstname() + ")"; + } } assertThatExceptionOfType(UnsupportedOperationException.class).isThrownBy(() -> { @@ -2709,9 +2718,22 @@ void findByFluentSpecificationWithSortedInterfaceBasedProjection() { @Test // GH-2274 void fluentSpecificationWithClassBasedDtosNotYetSupported() { - @Data class UserDto { String firstname; + + public UserDto() {} + + public String getFirstname() { + return this.firstname; + } + + public void setFirstname(String firstname) { + this.firstname = firstname; + } + + public String toString() { + return "UserDto(firstname=" + this.getFirstname() + ")"; + } } assertThatExceptionOfType(UnsupportedOperationException.class).isThrownBy(() -> { diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/procedures/MySqlStoredProcedureIntegrationTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/procedures/MySqlStoredProcedureIntegrationTests.java index cf4ce08c03..025e3424bc 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/procedures/MySqlStoredProcedureIntegrationTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/procedures/MySqlStoredProcedureIntegrationTests.java @@ -16,18 +16,16 @@ package org.springframework.data.jpa.repository.procedures; -import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.*; import jakarta.persistence.Entity; import jakarta.persistence.EntityManagerFactory; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; import jakarta.persistence.NamedStoredProcedureQuery; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; import java.util.List; +import java.util.Objects; import java.util.Properties; import javax.sql.DataSource; @@ -146,17 +144,59 @@ void testEntityListFromNamedProcedure() { new Employee(4, "Gabriel")); } - @Data @Entity - @AllArgsConstructor - @NoArgsConstructor @NamedStoredProcedureQuery(name = "get_employees_mysql", procedureName = "get_employees", resultClasses = Employee.class) public static class Employee { @Id - @GeneratedValue private Integer id; + @GeneratedValue // + private Integer id; private String name; + + public Employee(Integer id, String name) { + + this.id = id; + this.name = name; + } + + public Employee() {} + + public Integer getId() { + return this.id; + } + + public String getName() { + return this.name; + } + + public void setId(Integer id) { + this.id = id; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public boolean equals(Object o) { + + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + Employee employee = (Employee) o; + return Objects.equals(id, employee.id) && Objects.equals(name, employee.name); + } + + @Override + public int hashCode() { + return Objects.hash(id, name); + } + + public String toString() { + return "MySqlStoredProcedureIntegrationTests.Employee(id=" + this.getId() + ", name=" + this.getName() + ")"; + } } @Transactional diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/procedures/PostgresStoredProcedureIntegrationTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/procedures/PostgresStoredProcedureIntegrationTests.java index 96c0f5e710..4b2a9c39dc 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/procedures/PostgresStoredProcedureIntegrationTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/procedures/PostgresStoredProcedureIntegrationTests.java @@ -25,12 +25,10 @@ import jakarta.persistence.NamedStoredProcedureQuery; import jakarta.persistence.ParameterMode; import jakarta.persistence.StoredProcedureParameter; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; import java.math.BigDecimal; import java.util.List; +import java.util.Objects; import java.util.Properties; import javax.sql.DataSource; @@ -152,10 +150,7 @@ void testEntityListFromNamedProcedure() { new Employee(4, "Gabriel")); } - @Data @Entity - @AllArgsConstructor - @NoArgsConstructor @NamedStoredProcedureQuery( // name = "get_employees_postgres", // procedureName = "get_employees", // @@ -164,8 +159,53 @@ void testEntityListFromNamedProcedure() { public static class Employee { @Id - @GeneratedValue private Integer id; + @GeneratedValue // + private Integer id; private String name; + + public Employee(Integer id, String name) { + + this.id = id; + this.name = name; + } + + public Employee() {} + + public Integer getId() { + return this.id; + } + + public String getName() { + return this.name; + } + + public void setId(Integer id) { + this.id = id; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public boolean equals(Object o) { + + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + Employee employee = (Employee) o; + return Objects.equals(id, employee.id) && Objects.equals(name, employee.name); + } + + @Override + public int hashCode() { + return Objects.hash(id, name); + } + + public String toString() { + return "PostgresStoredProcedureIntegrationTests.Employee(id=" + this.getId() + ", name=" + this.getName() + ")"; + } } @Transactional diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/procedures/PostgresStoredProcedureNullHandlingIntegrationTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/procedures/PostgresStoredProcedureNullHandlingIntegrationTests.java index bf87de2be4..1739dbed9e 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/procedures/PostgresStoredProcedureNullHandlingIntegrationTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/procedures/PostgresStoredProcedureNullHandlingIntegrationTests.java @@ -20,10 +20,6 @@ import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; -import lombok.AccessLevel; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.NoArgsConstructor; import java.util.Date; import java.util.Properties; @@ -81,16 +77,52 @@ void invokingNullOnTemporalStoredProcedureParameterShouldWork() { repository.countLocalDate(null); } - @Data - @AllArgsConstructor - @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity class TestModel { @Id - @GeneratedValue(strategy = GenerationType.AUTO) private long id; + @GeneratedValue(strategy = GenerationType.AUTO) // + private long id; private UUID uuid; private Date date; + + public TestModel(long id, UUID uuid, Date date) { + + this.id = id; + this.uuid = uuid; + this.date = date; + } + + protected TestModel() {} + + public long getId() { + return this.id; + } + + public UUID getUuid() { + return this.uuid; + } + + public Date getDate() { + return this.date; + } + + public void setId(long id) { + this.id = id; + } + + public void setUuid(UUID uuid) { + this.uuid = uuid; + } + + public void setDate(Date date) { + this.date = date; + } + + public String toString() { + return "PostgresStoredProcedureNullHandlingIntegrationTests.TestModel(id=" + this.getId() + ", uuid=" + + this.getUuid() + ", date=" + this.getDate() + ")"; + } } @Transactional diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/projections/ProjectionJoinIntegrationTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/projections/ProjectionJoinIntegrationTests.java index d100cb3f0f..08be64dd89 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/projections/ProjectionJoinIntegrationTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/projections/ProjectionJoinIntegrationTests.java @@ -17,8 +17,6 @@ import static org.assertj.core.api.Assertions.*; -import lombok.Data; - import jakarta.persistence.Access; import jakarta.persistence.AccessType; import jakarta.persistence.CascadeType; @@ -31,7 +29,6 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.repository.CrudRepository; import org.springframework.test.context.ContextConfiguration; @@ -59,7 +56,6 @@ void findByIdPerformsAnOuterJoin() { assertThat(projection.getAddress()).isNull(); } - @Data public static class UserProjection { private final int id; @@ -69,6 +65,19 @@ public UserProjection(int id, Address address) { this.id = id; this.address = address; } + + public int getId() { + return this.id; + } + + public Address getAddress() { + return this.address; + } + + public String toString() { + return "ProjectionJoinIntegrationTests.UserProjection(id=" + this.getId() + ", address=" + this.getAddress() + + ")"; + } } public interface UserRepository extends CrudRepository { @@ -76,21 +85,68 @@ public interface UserRepository extends CrudRepository { T findById(int id, Class projectionClass); } - @Data @Table(name = "ProjectionJoinIntegrationTests_User") @Entity static class User { - @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Access(value = AccessType.PROPERTY) int id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Access(value = AccessType.PROPERTY) int id; @OneToOne(cascade = CascadeType.ALL) Address address; + + public User() {} + + public int getId() { + return this.id; + } + + public Address getAddress() { + return this.address; + } + + public void setId(int id) { + this.id = id; + } + + public void setAddress(Address address) { + this.address = address; + } + + public String toString() { + return "ProjectionJoinIntegrationTests.User(id=" + this.getId() + ", address=" + this.getAddress() + ")"; + } } - @Data @Table(name = "ProjectionJoinIntegrationTests_Address") @Entity static class Address { - @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Access(value = AccessType.PROPERTY) int id; + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Access(value = AccessType.PROPERTY) // + int id; String streetName; + + public Address() {} + + public int getId() { + return this.id; + } + + public String getStreetName() { + return this.streetName; + } + + public void setId(int id) { + this.id = id; + } + + public void setStreetName(String streetName) { + this.streetName = streetName; + } + + public String toString() { + return "ProjectionJoinIntegrationTests.Address(id=" + this.getId() + ", streetName=" + this.getStreetName() + ")"; + } } } diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/projections/ProjectionsIntegrationTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/projections/ProjectionsIntegrationTests.java index 0572cef1cf..66b4f99267 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/projections/ProjectionsIntegrationTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/projections/ProjectionsIntegrationTests.java @@ -17,12 +17,6 @@ import static org.assertj.core.api.Assertions.*; -import lombok.Data; - -import java.util.ArrayList; -import java.util.List; -import java.util.Properties; - import jakarta.persistence.CascadeType; import jakarta.persistence.Entity; import jakarta.persistence.EntityManagerFactory; @@ -31,12 +25,16 @@ import jakarta.persistence.JoinColumn; import jakarta.persistence.OneToMany; import jakarta.persistence.Table; + +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; + import javax.sql.DataSource; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.data.jpa.repository.JpaRepository; @@ -94,28 +92,99 @@ private SubEntity createSubEntity(int index) { return entity; } - @Data @Entity(name = "Dummy") @Table(name = "DummyEntity") static class DummyEntityWithCollection { - @GeneratedValue @Id Long id; + @GeneratedValue + @Id Long id; String name; - @OneToMany(cascade = CascadeType.ALL) @JoinColumn(name = "subs") List subs = new ArrayList<>(); + @OneToMany(cascade = CascadeType.ALL) + @JoinColumn(name = "subs") List subs = new ArrayList<>(); String otherAttribute; + + public DummyEntityWithCollection() {} + + public Long getId() { + return this.id; + } + + public String getName() { + return this.name; + } + + public List getSubs() { + return this.subs; + } + + public String getOtherAttribute() { + return this.otherAttribute; + } + + public void setId(Long id) { + this.id = id; + } + + public void setName(String name) { + this.name = name; + } + + public void setSubs(List subs) { + this.subs = subs; + } + + public void setOtherAttribute(String otherAttribute) { + this.otherAttribute = otherAttribute; + } + + public String toString() { + return "ProjectionsIntegrationTests.DummyEntityWithCollection(id=" + this.getId() + ", name=" + this.getName() + + ", subs=" + this.getSubs() + ", otherAttribute=" + this.getOtherAttribute() + ")"; + } } - @Data @Entity @Table(name = "SubEntity") static class SubEntity { - @GeneratedValue @Id Long id; + @GeneratedValue + @Id Long id; String name; String otherAttribute; + + public SubEntity() {} + + public Long getId() { + return this.id; + } + + public String getName() { + return this.name; + } + + public String getOtherAttribute() { + return this.otherAttribute; + } + + public void setId(Long id) { + this.id = id; + } + + public void setName(String name) { + this.name = name; + } + + public void setOtherAttribute(String otherAttribute) { + this.otherAttribute = otherAttribute; + } + + public String toString() { + return "ProjectionsIntegrationTests.SubEntity(id=" + this.getId() + ", name=" + this.getName() + + ", otherAttribute=" + this.getOtherAttribute() + ")"; + } } interface DummyEntityProjection { diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/NamedOrIndexedQueryParameterSetterUnitTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/NamedOrIndexedQueryParameterSetterUnitTests.java index 171322146e..47a063bad4 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/NamedOrIndexedQueryParameterSetterUnitTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/query/NamedOrIndexedQueryParameterSetterUnitTests.java @@ -25,7 +25,6 @@ import jakarta.persistence.Query; import jakarta.persistence.TemporalType; import jakarta.persistence.criteria.ParameterExpression; -import lombok.Value; import java.util.Arrays; import java.util.Collections; @@ -216,15 +215,33 @@ private static Query mockExceptionThrowingQueryWithNamedParameters() { return query; } - @Value - private static class ParameterImpl implements Parameter { + private static final class ParameterImpl implements Parameter { - String name; - Integer position; + private final String name; + private final Integer position; + + public ParameterImpl(String name, Integer position) { + + this.name = name; + this.position = position; + } @Override public Class getParameterType() { return Object.class; } + + public String getName() { + return this.name; + } + + public Integer getPosition() { + return this.position; + } + + public String toString() { + return "NamedOrIndexedQueryParameterSetterUnitTests.ParameterImpl(name=" + this.getName() + ", position=" + + this.getPosition() + ")"; + } } } diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/support/JpaMetamodelEntityInformationIntegrationTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/support/JpaMetamodelEntityInformationIntegrationTests.java index 1545a21ae8..b8b2ea739f 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/support/JpaMetamodelEntityInformationIntegrationTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/support/JpaMetamodelEntityInformationIntegrationTests.java @@ -19,7 +19,6 @@ import static org.springframework.data.jpa.repository.support.JpaEntityInformationSupport.*; import jakarta.persistence.*; -import lombok.Data; import java.io.Serializable; import java.sql.Timestamp; @@ -359,18 +358,62 @@ public static class EntityWithIdClass { @Id String id2; } - @Data public static class EntityWithIdClassPK implements Serializable { String id1; String id2; + + public EntityWithIdClassPK() {} + + public String getId1() { + return this.id1; + } + + public String getId2() { + return this.id2; + } + + public void setId1(String id1) { + this.id1 = id1; + } + + public void setId2(String id2) { + this.id2 = id2; + } + + public String toString() { + return "JpaMetamodelEntityInformationIntegrationTests.EntityWithIdClassPK(id1=" + this.getId1() + ", id2=" + + this.getId2() + ")"; + } } - @Data public static class EntityWithNestedIdClassPK implements Serializable { Long id; EntityWithIdClassPK reference; + + public EntityWithNestedIdClassPK() {} + + public Long getId() { + return this.id; + } + + public EntityWithIdClassPK getReference() { + return this.reference; + } + + public void setId(Long id) { + this.id = id; + } + + public void setReference(EntityWithIdClassPK reference) { + this.reference = reference; + } + + public String toString() { + return "JpaMetamodelEntityInformationIntegrationTests.EntityWithNestedIdClassPK(id=" + this.getId() + + ", reference=" + this.getReference() + ")"; + } } @Entity diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/support/JpaPersistableEntityInformationUnitTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/support/JpaPersistableEntityInformationUnitTests.java index db6684898b..9d7f93c3ee 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/support/JpaPersistableEntityInformationUnitTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/support/JpaPersistableEntityInformationUnitTests.java @@ -15,8 +15,8 @@ */ package org.springframework.data.jpa.repository.support; -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.when; +import static org.assertj.core.api.Assertions.*; +import static org.mockito.Mockito.*; import jakarta.persistence.EntityManager; import jakarta.persistence.EntityManagerFactory; @@ -24,7 +24,6 @@ import jakarta.persistence.metamodel.EntityType; import jakarta.persistence.metamodel.Metamodel; import jakarta.persistence.metamodel.Type; -import lombok.Getter; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -87,11 +86,15 @@ void usesPersistableMethodsForIsNewAndGetId() { @SuppressWarnings("serial") class Foo implements Persistable { - @Getter Long id; + Long id; @Override public boolean isNew() { return id != null; } + + public Long getId() { + return this.id; + } } } diff --git a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/support/QuerydslJpaPredicateExecutorUnitTests.java b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/support/QuerydslJpaPredicateExecutorUnitTests.java index a0eb72430a..00df593ef8 100644 --- a/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/support/QuerydslJpaPredicateExecutorUnitTests.java +++ b/spring-data-jpa/src/test/java/org/springframework/data/jpa/repository/support/QuerydslJpaPredicateExecutorUnitTests.java @@ -15,12 +15,10 @@ */ package org.springframework.data.jpa.repository.support; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatExceptionOfType; +import static org.assertj.core.api.Assertions.*; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; -import lombok.Data; import java.sql.Date; import java.time.LocalDate; @@ -440,9 +438,22 @@ void existsByFluentPredicate() { @Test // GH-2294 void fluentExamplesWithClassBasedDtosNotYetSupported() { - @Data class UserDto { String firstname; + + public UserDto() {} + + public String getFirstname() { + return this.firstname; + } + + public void setFirstname(String firstname) { + this.firstname = firstname; + } + + public String toString() { + return "UserDto(firstname=" + this.getFirstname() + ")"; + } } assertThatExceptionOfType(UnsupportedOperationException.class).isThrownBy(() -> predicateExecutor