diff --git a/persistence-modules/pom.xml b/persistence-modules/pom.xml
index f1154f203b..c598ad8805 100644
--- a/persistence-modules/pom.xml
+++ b/persistence-modules/pom.xml
@@ -59,11 +59,12 @@
spring-data-elasticsearch
spring-data-gemfire
spring-data-geode
- spring-data-jpa
- spring-data-jpa-2
- spring-data-jpa-3
- spring-data-jpa-4
- spring-data-jpa-5
+ spring-data-jpa-annotations
+ spring-data-jpa-crud
+ spring-data-jpa-enterprise
+ spring-data-jpa-filtering
+ spring-data-jpa-query
+ spring-data-jpa-repo
spring-data-keyvalue
spring-data-mongodb
spring-data-neo4j
diff --git a/persistence-modules/spring-data-jpa-2/README.md b/persistence-modules/spring-data-jpa-2/README.md
deleted file mode 100644
index e59aca7c69..0000000000
--- a/persistence-modules/spring-data-jpa-2/README.md
+++ /dev/null
@@ -1,12 +0,0 @@
-### Relevant Articles:
-- [Spring Data JPA – Derived Delete Methods](https://www.baeldung.com/spring-data-jpa-deleteby)
-- [JPA Join Types](https://www.baeldung.com/jpa-join-types)
-- [Case Insensitive Queries with Spring Data Repository](https://www.baeldung.com/spring-data-case-insensitive-queries)
-- [The Exists Query in Spring Data](https://www.baeldung.com/spring-data-exists-query)
-- [Spring Data JPA Repository Populators](https://www.baeldung.com/spring-data-jpa-repository-populators)
-- [Spring Data JPA and Null Parameters](https://www.baeldung.com/spring-data-jpa-null-parameters)
-- [Spring Data JPA Projections](https://www.baeldung.com/spring-data-jpa-projections)
-- [JPA @Embedded And @Embeddable](https://www.baeldung.com/jpa-embedded-embeddable)
-- [Spring Data JPA Delete and Relationships](https://www.baeldung.com/spring-data-jpa-delete)
-- [Spring Data JPA and Named Entity Graphs](https://www.baeldung.com/spring-data-jpa-named-entity-graphs)
-- [Customizing the Result of JPA Queries with Aggregation Functions](https://www.baeldung.com/jpa-queries-custom-result-with-aggregation-functions)
diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/model/BasicUser.java b/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/model/BasicUser.java
deleted file mode 100644
index 2dc9c18cf6..0000000000
--- a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/model/BasicUser.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.baeldung.model;
-
-import javax.persistence.*;
-import java.util.Set;
-
-@Entity
-@Table(name = "users")
-public class BasicUser {
-
- @Id
- @GeneratedValue
- private Long id;
-
- private String username;
-
- @ElementCollection
- private Set permissions;
-
- public Long getId() {
- return id;
- }
-
- public void setId(Long id) {
- this.id = id;
- }
-
- public String getUsername() {
- return username;
- }
-
- public void setUsername(String username) {
- this.username = username;
- }
-
- public Set getPermissions() {
- return permissions;
- }
-
- public void setPermissions(Set permissions) {
- this.permissions = permissions;
- }
-}
diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/multipledb/dao/product/ProductRepository.java b/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/multipledb/dao/product/ProductRepository.java
deleted file mode 100644
index 6ce9bcad45..0000000000
--- a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/multipledb/dao/product/ProductRepository.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.baeldung.multipledb.dao.product;
-
-import java.util.List;
-
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.repository.PagingAndSortingRepository;
-
-import com.baeldung.multipledb.model.product.Product;
-
-public interface ProductRepository extends PagingAndSortingRepository {
-
- List findAllByPrice(double price, Pageable pageable);
-}
diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/repository/UserRepository.java b/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/repository/UserRepository.java
deleted file mode 100644
index f683be402f..0000000000
--- a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/repository/UserRepository.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.baeldung.repository;
-
-import java.util.Optional;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-
-import com.baeldung.model.BasicUser;
-
-public interface UserRepository extends JpaRepository {
-
- Optional findSummaryByUsername(String username);
-
- Optional findByUsername(String username);
-}
diff --git a/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/multipledb/ProductRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/multipledb/ProductRepositoryIntegrationTest.java
deleted file mode 100644
index 831790af95..0000000000
--- a/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/multipledb/ProductRepositoryIntegrationTest.java
+++ /dev/null
@@ -1,142 +0,0 @@
-package com.baeldung.multipledb;
-
-import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.hasSize;
-import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.stream.Collectors;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.domain.Sort;
-import org.springframework.test.context.junit4.SpringRunner;
-import org.springframework.transaction.annotation.EnableTransactionManagement;
-import org.springframework.transaction.annotation.Transactional;
-
-import com.baeldung.multipledb.dao.product.ProductRepository;
-import com.baeldung.multipledb.model.product.Product;
-
-@RunWith(SpringRunner.class)
-@SpringBootTest(classes=MultipleDbApplication.class)
-@EnableTransactionManagement
-public class ProductRepositoryIntegrationTest {
-
- @Autowired
- private ProductRepository productRepository;
-
- @Before
- @Transactional("productTransactionManager")
- public void setUp() {
- productRepository.save(Product.from(1001, "Book", 21));
- productRepository.save(Product.from(1002, "Coffee", 10));
- productRepository.save(Product.from(1003, "Jeans", 30));
- productRepository.save(Product.from(1004, "Shirt", 32));
- productRepository.save(Product.from(1005, "Bacon", 10));
- }
-
- @Test
- public void whenRequestingFirstPageOfSizeTwo_ThenReturnFirstPage() {
- Pageable pageRequest = PageRequest.of(0, 2);
-
- Page result = productRepository.findAll(pageRequest);
-
- assertThat(result.getContent(), hasSize(2));
- assertTrue(result.stream()
- .map(Product::getId)
- .allMatch(id -> Arrays.asList(1001, 1002)
- .contains(id)));
- }
-
- @Test
- public void whenRequestingSecondPageOfSizeTwo_ThenReturnSecondPage() {
- Pageable pageRequest = PageRequest.of(1, 2);
-
- Page result = productRepository.findAll(pageRequest);
-
- assertThat(result.getContent(), hasSize(2));
- assertTrue(result.stream()
- .map(Product::getId)
- .allMatch(id -> Arrays.asList(1003, 1004)
- .contains(id)));
- }
-
- @Test
- public void whenRequestingLastPage_ThenReturnLastPageWithRemData() {
- Pageable pageRequest = PageRequest.of(2, 2);
-
- Page result = productRepository.findAll(pageRequest);
-
- assertThat(result.getContent(), hasSize(1));
- assertTrue(result.stream()
- .map(Product::getId)
- .allMatch(id -> Arrays.asList(1005)
- .contains(id)));
- }
-
- @Test
- public void whenSortingByNameAscAndPaging_ThenReturnSortedPagedResult() {
- Pageable pageRequest = PageRequest.of(0, 3, Sort.by("name"));
-
- Page result = productRepository.findAll(pageRequest);
-
- assertThat(result.getContent(), hasSize(3));
- assertThat(result.getContent()
- .stream()
- .map(Product::getId)
- .collect(Collectors.toList()), equalTo(Arrays.asList(1005, 1001, 1002)));
-
- }
-
- @Test
- public void whenSortingByPriceDescAndPaging_ThenReturnSortedPagedResult() {
- Pageable pageRequest = PageRequest.of(0, 3, Sort.by("price")
- .descending());
-
- Page result = productRepository.findAll(pageRequest);
-
- assertThat(result.getContent(), hasSize(3));
- assertThat(result.getContent()
- .stream()
- .map(Product::getId)
- .collect(Collectors.toList()), equalTo(Arrays.asList(1004, 1003, 1001)));
-
- }
-
- @Test
- public void whenSortingByPriceDescAndNameAscAndPaging_ThenReturnSortedPagedResult() {
- Pageable pageRequest = PageRequest.of(0, 5, Sort.by("price")
- .descending()
- .and(Sort.by("name")));
-
- Page result = productRepository.findAll(pageRequest);
-
- assertThat(result.getContent(), hasSize(5));
- assertThat(result.getContent()
- .stream()
- .map(Product::getId)
- .collect(Collectors.toList()), equalTo(Arrays.asList(1004, 1003, 1001, 1005, 1002)));
-
- }
-
- @Test
- public void whenRequestingFirstPageOfSizeTwoUsingCustomMethod_ThenReturnFirstPage() {
- Pageable pageRequest = PageRequest.of(0, 2);
-
- List result = productRepository.findAllByPrice(10, pageRequest);
-
- assertThat(result, hasSize(2));
- assertTrue(result.stream()
- .map(Product::getId)
- .allMatch(id -> Arrays.asList(1002, 1005)
- .contains(id)));
- }
-}
diff --git a/persistence-modules/spring-data-jpa-3/src/test/resources/application-tc-auto.properties b/persistence-modules/spring-data-jpa-3/src/test/resources/application-tc-auto.properties
deleted file mode 100644
index c3005d861f..0000000000
--- a/persistence-modules/spring-data-jpa-3/src/test/resources/application-tc-auto.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-# configuration for test containers testing
-spring.datasource.url=${DB_URL}
-spring.datasource.username=${DB_USERNAME}
-spring.datasource.password=${DB_PASSWORD}
diff --git a/persistence-modules/spring-data-jpa-3/src/test/resources/application-tc.properties b/persistence-modules/spring-data-jpa-3/src/test/resources/application-tc.properties
deleted file mode 100644
index 3bf8693d53..0000000000
--- a/persistence-modules/spring-data-jpa-3/src/test/resources/application-tc.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-# configuration for Test Containers testing
-spring.datasource.driver-class-name=org.postgresql.Driver
-spring.jpa.hibernate.ddl-auto=create-drop
-spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false
diff --git a/persistence-modules/spring-data-jpa-4/create.sql b/persistence-modules/spring-data-jpa-4/create.sql
deleted file mode 100644
index 1bbe1640a7..0000000000
--- a/persistence-modules/spring-data-jpa-4/create.sql
+++ /dev/null
@@ -1,2 +0,0 @@
-create table PERSON (ID int8 not null, FIRST_NAME varchar(255), LAST_NAME varchar(255), primary key (ID))
-create table person (id int8 not null, first_name varchar(255), last_name varchar(255), primary key (id))
diff --git a/persistence-modules/spring-data-jpa-5/README.md b/persistence-modules/spring-data-jpa-5/README.md
deleted file mode 100644
index 0b78ced66c..0000000000
--- a/persistence-modules/spring-data-jpa-5/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-### Relevant Articles:
-
-- [Spring JPA @Embedded and @EmbeddedId](https://www.baeldung.com/spring-jpa-embedded-method-parameters)
-- [Generate Database Schema with Spring Data JPA](https://www.baeldung.com/spring-data-jpa-generate-db-schema)
-- [Partial Data Update with Spring Data](https://www.baeldung.com/spring-data-partial-update)
-
-### Eclipse Config
-After importing the project into Eclipse, you may see the following error:
-"No persistence xml file found in project"
-
-This can be ignored:
-- Project -> Properties -> Java Persistance -> JPA -> Error/Warnings -> Select Ignore on "No persistence xml file found in project"
-Or:
-- Eclipse -> Preferences - Validation - disable the "Build" execution of the JPA Validator
-
diff --git a/persistence-modules/spring-data-jpa-annotations/README.md b/persistence-modules/spring-data-jpa-annotations/README.md
new file mode 100644
index 0000000000..5f1c8dbc27
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-annotations/README.md
@@ -0,0 +1,23 @@
+## Spring Data JPA - Annotations
+
+This module contains articles about annotations used in Spring Data JPA
+
+### Relevant articles
+
+- [Spring Data Annotations](https://www.baeldung.com/spring-data-annotations)
+- [DDD Aggregates and @DomainEvents](https://www.baeldung.com/spring-data-ddd)
+- [JPA @Embedded And @Embeddable](https://www.baeldung.com/jpa-embedded-embeddable)
+- [Spring Data JPA @Modifying Annotation](https://www.baeldung.com/spring-data-jpa-modifying-annotation)
+- [Spring JPA @Embedded and @EmbeddedId](https://www.baeldung.com/spring-jpa-embedded-method-parameters)
+- [Programmatic Transaction Management in Spring](https://www.baeldung.com/spring-programmatic-transaction-management)
+- [JPA Entity Lifecycle Events](https://www.baeldung.com/jpa-entity-lifecycle-events)
+
+### Eclipse Config
+After importing the project into Eclipse, you may see the following error:
+"No persistence xml file found in project"
+
+This can be ignored:
+- Project -> Properties -> Java Persistance -> JPA -> Error/Warnings -> Select Ignore on "No persistence xml file found in project"
+Or:
+- Eclipse -> Preferences - Validation - disable the "Build" execution of the JPA Validator
+
diff --git a/persistence-modules/spring-data-jpa-annotations/pom.xml b/persistence-modules/spring-data-jpa-annotations/pom.xml
new file mode 100644
index 0000000000..67b788c404
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-annotations/pom.xml
@@ -0,0 +1,77 @@
+
+
+ 4.0.0
+ spring-data-jpa-annotations
+ spring-data-jpa-annotations
+
+
+ com.baeldung
+ parent-boot-2
+ 0.0.1-SNAPSHOT
+ ../../parent-boot-2
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+ org.hibernate
+ hibernate-ehcache
+
+
+ org.hibernate
+ hibernate-envers
+
+
+
+ com.h2database
+ h2
+
+
+
+
+ org.testcontainers
+ postgresql
+ ${testcontainers.postgresql.version}
+ test
+
+
+
+ org.postgresql
+ postgresql
+
+
+
+
+ org.springframework.security
+ spring-security-test
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+ com.google.guava
+ guava
+ ${guava.version}
+
+
+
+
+ com.baeldung.boot.Application
+ 1.10.6
+ 42.2.5
+ 21.0
+
+
+
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/Application.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/Application.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/Application.java
rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/Application.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/Aggregate.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/boot/ddd/event/Aggregate.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/Aggregate.java
rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/boot/ddd/event/Aggregate.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/Aggregate2.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/boot/ddd/event/Aggregate2.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/Aggregate2.java
rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/boot/ddd/event/Aggregate2.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/Aggregate2Repository.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/boot/ddd/event/Aggregate2Repository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/Aggregate2Repository.java
rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/boot/ddd/event/Aggregate2Repository.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/Aggregate3.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/boot/ddd/event/Aggregate3.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/Aggregate3.java
rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/boot/ddd/event/Aggregate3.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/Aggregate3Repository.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/boot/ddd/event/Aggregate3Repository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/Aggregate3Repository.java
rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/boot/ddd/event/Aggregate3Repository.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/AggregateRepository.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/boot/ddd/event/AggregateRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/AggregateRepository.java
rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/boot/ddd/event/AggregateRepository.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/DddConfig.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/boot/ddd/event/DddConfig.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/DddConfig.java
rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/boot/ddd/event/DddConfig.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/DomainEvent.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/boot/ddd/event/DomainEvent.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/DomainEvent.java
rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/boot/ddd/event/DomainEvent.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/DomainService.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/boot/ddd/event/DomainService.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/DomainService.java
rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/boot/ddd/event/DomainService.java
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/composite/BookApplication.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/composite/BookApplication.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/composite/BookApplication.java
rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/composite/BookApplication.java
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/composite/entity/Book.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/composite/entity/Book.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/composite/entity/Book.java
rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/composite/entity/Book.java
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/composite/entity/BookId.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/composite/entity/BookId.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/composite/entity/BookId.java
rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/composite/entity/BookId.java
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/composite/repository/BookRepository.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/composite/repository/BookRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/composite/repository/BookRepository.java
rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/composite/repository/BookRepository.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/embeddable/model/Company.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/embeddable/model/Company.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/embeddable/model/Company.java
rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/embeddable/model/Company.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/embeddable/model/ContactPerson.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/embeddable/model/ContactPerson.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/embeddable/model/ContactPerson.java
rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/embeddable/model/ContactPerson.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/embeddable/repositories/CompanyRepository.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/embeddable/repositories/CompanyRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/embeddable/repositories/CompanyRepository.java
rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/embeddable/repositories/CompanyRepository.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/lifecycleevents/SpringBootLifecycleEventApplication.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/lifecycleevents/SpringBootLifecycleEventApplication.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/lifecycleevents/SpringBootLifecycleEventApplication.java
rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/lifecycleevents/SpringBootLifecycleEventApplication.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/lifecycleevents/model/AuditTrailListener.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/lifecycleevents/model/AuditTrailListener.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/lifecycleevents/model/AuditTrailListener.java
rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/lifecycleevents/model/AuditTrailListener.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/lifecycleevents/model/User.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/lifecycleevents/model/User.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/lifecycleevents/model/User.java
rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/lifecycleevents/model/User.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/lifecycleevents/repository/UserRepository.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/lifecycleevents/repository/UserRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/lifecycleevents/repository/UserRepository.java
rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/lifecycleevents/repository/UserRepository.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/tx/TxApplication.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/tx/TxApplication.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/tx/TxApplication.java
rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/tx/TxApplication.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/tx/model/Payment.java b/persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/tx/model/Payment.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/tx/model/Payment.java
rename to persistence-modules/spring-data-jpa-annotations/src/main/java/com/baeldung/tx/model/Payment.java
diff --git a/persistence-modules/spring-data-jpa-3/src/main/resources/application.properties b/persistence-modules/spring-data-jpa-annotations/src/main/resources/application.properties
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/main/resources/application.properties
rename to persistence-modules/spring-data-jpa-annotations/src/main/resources/application.properties
diff --git a/persistence-modules/spring-data-jpa/src/main/resources/ddd.properties b/persistence-modules/spring-data-jpa-annotations/src/main/resources/ddd.properties
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/resources/ddd.properties
rename to persistence-modules/spring-data-jpa-annotations/src/main/resources/ddd.properties
diff --git a/persistence-modules/spring-data-jpa-3/src/main/resources/logback.xml b/persistence-modules/spring-data-jpa-annotations/src/main/resources/logback.xml
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/main/resources/logback.xml
rename to persistence-modules/spring-data-jpa-annotations/src/main/resources/logback.xml
diff --git a/persistence-modules/spring-data-jpa/src/main/resources/persistence.properties b/persistence-modules/spring-data-jpa-annotations/src/main/resources/persistence.properties
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/resources/persistence.properties
rename to persistence-modules/spring-data-jpa-annotations/src/main/resources/persistence.properties
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/ddd/event/Aggregate2EventsIntegrationTest.java b/persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/boot/ddd/event/Aggregate2EventsIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/ddd/event/Aggregate2EventsIntegrationTest.java
rename to persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/boot/ddd/event/Aggregate2EventsIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/ddd/event/Aggregate3EventsIntegrationTest.java b/persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/boot/ddd/event/Aggregate3EventsIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/ddd/event/Aggregate3EventsIntegrationTest.java
rename to persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/boot/ddd/event/Aggregate3EventsIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/ddd/event/AggregateEventsIntegrationTest.java b/persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/boot/ddd/event/AggregateEventsIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/ddd/event/AggregateEventsIntegrationTest.java
rename to persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/boot/ddd/event/AggregateEventsIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/ddd/event/TestEventHandler.java b/persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/boot/ddd/event/TestEventHandler.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/ddd/event/TestEventHandler.java
rename to persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/boot/ddd/event/TestEventHandler.java
diff --git a/persistence-modules/spring-data-jpa-5/src/test/java/com/baeldung/composite/repository/BookRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/composite/repository/BookRepositoryIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-5/src/test/java/com/baeldung/composite/repository/BookRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/composite/repository/BookRepositoryIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/embeddable/EmbeddableIntegrationTest.java b/persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/embeddable/EmbeddableIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/embeddable/EmbeddableIntegrationTest.java
rename to persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/embeddable/EmbeddableIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/tx/ManualTransactionIntegrationTest.java b/persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/tx/ManualTransactionIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/tx/ManualTransactionIntegrationTest.java
rename to persistence-modules/spring-data-jpa-annotations/src/test/java/com/baeldung/tx/ManualTransactionIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-4/src/test/java/lifecycleevents/UserRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-annotations/src/test/java/lifecycleevents/UserRepositoryIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/test/java/lifecycleevents/UserRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-jpa-annotations/src/test/java/lifecycleevents/UserRepositoryIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-3/README.md b/persistence-modules/spring-data-jpa-crud/README.md
similarity index 55%
rename from persistence-modules/spring-data-jpa-3/README.md
rename to persistence-modules/spring-data-jpa-crud/README.md
index bac52bf114..dc0c78c87e 100644
--- a/persistence-modules/spring-data-jpa-3/README.md
+++ b/persistence-modules/spring-data-jpa-crud/README.md
@@ -1,14 +1,15 @@
+## Spring Data JPA - CRUD
+
+This module contains articles about CRUD operations in Spring Data JPA
+
### Relevant Articles:
-- [Limiting Query Results with JPA and Spring Data JPA](https://www.baeldung.com/jpa-limit-query-results)
-- [Sorting Query Results with Spring Data](https://www.baeldung.com/spring-data-sorting)
+- [Spring Data JPA – Derived Delete Methods](https://www.baeldung.com/spring-data-jpa-deleteby)
+- [Spring Data JPA Delete and Relationships](https://www.baeldung.com/spring-data-jpa-delete)
- [INSERT Statement in JPA](https://www.baeldung.com/jpa-insert)
-- [Pagination and Sorting using Spring Data JPA](https://www.baeldung.com/spring-data-jpa-pagination-sorting)
-- [Spring Data JPA Query by Example](https://www.baeldung.com/spring-data-query-by-example)
-- [DB Integration Tests with Spring Boot and Testcontainers](https://www.baeldung.com/spring-boot-testcontainers-integration-test)
-- [Spring Data JPA @Modifying Annotation](https://www.baeldung.com/spring-data-jpa-modifying-annotation)
- [Spring Data JPA Batch Inserts](https://www.baeldung.com/spring-data-jpa-batch-inserts)
- [Batch Insert/Update with Hibernate/JPA](https://www.baeldung.com/jpa-hibernate-batch-insert-update)
- [Difference Between save() and saveAndFlush() in Spring Data JPA](https://www.baeldung.com/spring-data-jpa-save-saveandflush)
+- [Generate Database Schema with Spring Data JPA](https://www.baeldung.com/spring-data-jpa-generate-db-schema)
### Eclipse Config
After importing the project into Eclipse, you may see the following error:
diff --git a/persistence-modules/spring-data-jpa-3/pom.xml b/persistence-modules/spring-data-jpa-crud/pom.xml
similarity index 96%
rename from persistence-modules/spring-data-jpa-3/pom.xml
rename to persistence-modules/spring-data-jpa-crud/pom.xml
index d02d089ba3..1708d14fc2 100644
--- a/persistence-modules/spring-data-jpa-3/pom.xml
+++ b/persistence-modules/spring-data-jpa-crud/pom.xml
@@ -4,8 +4,8 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- spring-data-jpa-3
- spring-data-jpa-3
+ spring-data-jpa-crud
+ spring-data-jpa-crud
com.baeldung
diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/Application.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/Application.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/Application.java
rename to persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/Application.java
diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/batchinserts/DatasourceProxyBeanPostProcessor.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/batchinserts/DatasourceProxyBeanPostProcessor.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/batchinserts/DatasourceProxyBeanPostProcessor.java
rename to persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/batchinserts/DatasourceProxyBeanPostProcessor.java
diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/batchinserts/model/School.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/batchinserts/model/School.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/batchinserts/model/School.java
rename to persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/batchinserts/model/School.java
diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/batchinserts/model/Student.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/batchinserts/model/Student.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/batchinserts/model/Student.java
rename to persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/batchinserts/model/Student.java
diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/Application.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/boot/Application.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/Application.java
rename to persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/boot/Application.java
diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/daos/CustomerRepository.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/boot/daos/CustomerRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/daos/CustomerRepository.java
rename to persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/boot/daos/CustomerRepository.java
diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/daos/impl/PersonInsertRepository.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/boot/daos/impl/PersonInsertRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/daos/impl/PersonInsertRepository.java
rename to persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/boot/daos/impl/PersonInsertRepository.java
diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/domain/Customer.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/boot/domain/Customer.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/domain/Customer.java
rename to persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/boot/domain/Customer.java
diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/domain/Person.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/boot/domain/Person.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/domain/Person.java
rename to persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/boot/domain/Person.java
diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/web/controllers/CustomerController.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/boot/web/controllers/CustomerController.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/web/controllers/CustomerController.java
rename to persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/boot/web/controllers/CustomerController.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/datajpadelete/entity/Book.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/datajpadelete/entity/Book.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/datajpadelete/entity/Book.java
rename to persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/datajpadelete/entity/Book.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/datajpadelete/entity/Category.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/datajpadelete/entity/Category.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/datajpadelete/entity/Category.java
rename to persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/datajpadelete/entity/Category.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/datajpadelete/repository/BookRepository.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/datajpadelete/repository/BookRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/datajpadelete/repository/BookRepository.java
rename to persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/datajpadelete/repository/BookRepository.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/datajpadelete/repository/CategoryRepository.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/datajpadelete/repository/CategoryRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/datajpadelete/repository/CategoryRepository.java
rename to persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/datajpadelete/repository/CategoryRepository.java
diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/entity/Employee.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/entity/Employee.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/entity/Employee.java
rename to persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/entity/Employee.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/entity/Fruit.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/entity/Fruit.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/entity/Fruit.java
rename to persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/entity/Fruit.java
diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/repository/EmployeeRepository.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/repository/EmployeeRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/repository/EmployeeRepository.java
rename to persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/repository/EmployeeRepository.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/repository/FruitRepository.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/repository/FruitRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/repository/FruitRepository.java
rename to persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/repository/FruitRepository.java
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/AccountApplication.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/schemageneration/AccountApplication.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/AccountApplication.java
rename to persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/schemageneration/AccountApplication.java
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/HibernateUtil.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/schemageneration/HibernateUtil.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/HibernateUtil.java
rename to persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/schemageneration/HibernateUtil.java
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/model/Account.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/schemageneration/model/Account.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/model/Account.java
rename to persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/schemageneration/model/Account.java
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/model/AccountSetting.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/schemageneration/model/AccountSetting.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/model/AccountSetting.java
rename to persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/schemageneration/model/AccountSetting.java
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/repository/AccountRepository.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/schemageneration/repository/AccountRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/repository/AccountRepository.java
rename to persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/schemageneration/repository/AccountRepository.java
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/repository/AccountSettingRepository.java b/persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/schemageneration/repository/AccountSettingRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/schemageneration/repository/AccountSettingRepository.java
rename to persistence-modules/spring-data-jpa-crud/src/main/java/com/baeldung/schemageneration/repository/AccountSettingRepository.java
diff --git a/persistence-modules/spring-data-jpa-crud/src/main/resources/application.properties b/persistence-modules/spring-data-jpa-crud/src/main/resources/application.properties
new file mode 100644
index 0000000000..af0df308cd
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-crud/src/main/resources/application.properties
@@ -0,0 +1,14 @@
+spring.main.allow-bean-definition-overriding=true
+
+spring.jpa.properties.hibernate.jdbc.batch_size=4
+spring.jpa.properties.hibernate.order_inserts=true
+spring.jpa.properties.hibernate.order_updates=true
+spring.jpa.properties.hibernate.generate_statistics=true
+
+# JPA-Schema-Generation
+# Use below configuration to generate database schema create commands based on the entity models
+# and export them into the create.sql file
+#spring.jpa.properties.javax.persistence.schema-generation.scripts.action=create
+#spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target=create.sql
+#spring.jpa.properties.javax.persistence.schema-generation.scripts.create-source=metadata
+#spring.jpa.properties.hibernate.format_sql=true
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa/src/main/resources/logback.xml b/persistence-modules/spring-data-jpa-crud/src/main/resources/logback.xml
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/resources/logback.xml
rename to persistence-modules/spring-data-jpa-crud/src/main/resources/logback.xml
diff --git a/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/SpringContextTest.java b/persistence-modules/spring-data-jpa-crud/src/test/java/com/baeldung/SpringContextTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/SpringContextTest.java
rename to persistence-modules/spring-data-jpa-crud/src/test/java/com/baeldung/SpringContextTest.java
diff --git a/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/SpringJpaContextIntegrationTest.java b/persistence-modules/spring-data-jpa-crud/src/test/java/com/baeldung/SpringJpaContextIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/SpringJpaContextIntegrationTest.java
rename to persistence-modules/spring-data-jpa-crud/src/test/java/com/baeldung/SpringJpaContextIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/batchinserts/BatchInsertIntegrationTest.java b/persistence-modules/spring-data-jpa-crud/src/test/java/com/baeldung/batchinserts/BatchInsertIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/batchinserts/BatchInsertIntegrationTest.java
rename to persistence-modules/spring-data-jpa-crud/src/test/java/com/baeldung/batchinserts/BatchInsertIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/batchinserts/JpaBatchInsertsIntegrationTest.java b/persistence-modules/spring-data-jpa-crud/src/test/java/com/baeldung/batchinserts/JpaBatchInsertsIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/batchinserts/JpaBatchInsertsIntegrationTest.java
rename to persistence-modules/spring-data-jpa-crud/src/test/java/com/baeldung/batchinserts/JpaBatchInsertsIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/batchinserts/JpaNoBatchInsertsIntegrationTest.java b/persistence-modules/spring-data-jpa-crud/src/test/java/com/baeldung/batchinserts/JpaNoBatchInsertsIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/batchinserts/JpaNoBatchInsertsIntegrationTest.java
rename to persistence-modules/spring-data-jpa-crud/src/test/java/com/baeldung/batchinserts/JpaNoBatchInsertsIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/batchinserts/TestObjectHelper.java b/persistence-modules/spring-data-jpa-crud/src/test/java/com/baeldung/batchinserts/TestObjectHelper.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/batchinserts/TestObjectHelper.java
rename to persistence-modules/spring-data-jpa-crud/src/test/java/com/baeldung/batchinserts/TestObjectHelper.java
diff --git a/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/boot/daos/PersonInsertRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-crud/src/test/java/com/baeldung/boot/daos/PersonInsertRepositoryIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/boot/daos/PersonInsertRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-jpa-crud/src/test/java/com/baeldung/boot/daos/PersonInsertRepositoryIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/datajpadelete/DeleteFromRepositoryUnitTest.java b/persistence-modules/spring-data-jpa-crud/src/test/java/com/baeldung/datajpadelete/DeleteFromRepositoryUnitTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/datajpadelete/DeleteFromRepositoryUnitTest.java
rename to persistence-modules/spring-data-jpa-crud/src/test/java/com/baeldung/datajpadelete/DeleteFromRepositoryUnitTest.java
diff --git a/persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/datajpadelete/DeleteInRelationshipsUnitTest.java b/persistence-modules/spring-data-jpa-crud/src/test/java/com/baeldung/datajpadelete/DeleteInRelationshipsUnitTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/datajpadelete/DeleteInRelationshipsUnitTest.java
rename to persistence-modules/spring-data-jpa-crud/src/test/java/com/baeldung/datajpadelete/DeleteInRelationshipsUnitTest.java
diff --git a/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/repository/EmployeeRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-crud/src/test/java/com/baeldung/repository/EmployeeRepositoryIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/repository/EmployeeRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-jpa-crud/src/test/java/com/baeldung/repository/EmployeeRepositoryIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/repository/FruitRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-crud/src/test/java/com/baeldung/repository/FruitRepositoryIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/repository/FruitRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-jpa-crud/src/test/java/com/baeldung/repository/FruitRepositoryIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-5/src/test/java/com/baeldung/schemageneration/AccountRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-crud/src/test/java/com/baeldung/schemageneration/AccountRepositoryIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-5/src/test/java/com/baeldung/schemageneration/AccountRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-jpa-crud/src/test/java/com/baeldung/schemageneration/AccountRepositoryIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-3/src/test/resources/application-batchinserts.properties b/persistence-modules/spring-data-jpa-crud/src/test/resources/application-batchinserts.properties
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/test/resources/application-batchinserts.properties
rename to persistence-modules/spring-data-jpa-crud/src/test/resources/application-batchinserts.properties
diff --git a/persistence-modules/spring-data-jpa-3/src/test/resources/application-test.properties b/persistence-modules/spring-data-jpa-crud/src/test/resources/application-test.properties
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/test/resources/application-test.properties
rename to persistence-modules/spring-data-jpa-crud/src/test/resources/application-test.properties
diff --git a/persistence-modules/spring-data-jpa-2/src/test/resources/test-fruit-data.sql b/persistence-modules/spring-data-jpa-crud/src/test/resources/test-fruit-data.sql
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/test/resources/test-fruit-data.sql
rename to persistence-modules/spring-data-jpa-crud/src/test/resources/test-fruit-data.sql
diff --git a/persistence-modules/spring-data-jpa-4/README.md b/persistence-modules/spring-data-jpa-enterprise/README.md
similarity index 51%
rename from persistence-modules/spring-data-jpa-4/README.md
rename to persistence-modules/spring-data-jpa-enterprise/README.md
index 085dfcb366..81398b1f00 100644
--- a/persistence-modules/spring-data-jpa-4/README.md
+++ b/persistence-modules/spring-data-jpa-enterprise/README.md
@@ -1,12 +1,17 @@
+## Spring Data JPA - Enterprise
+
+This module contains articles about Spring Data JPA used in enterprise applications such as transactions, sessions, naming conventions and more
+
### Relevant Articles:
-- [Derived Query Methods in Spring Data JPA Repositories](https://www.baeldung.com/spring-data-derived-queries)
-- [LIKE Queries in Spring JPA Repositories](https://www.baeldung.com/spring-jpa-like-queries)
+
+- [Spring JPA – Multiple Databases](https://www.baeldung.com/spring-data-jpa-multiple-databases)
+- [Spring Data Java 8 Support](https://www.baeldung.com/spring-data-java-8)
+- [Pagination and Sorting using Spring Data JPA](https://www.baeldung.com/spring-data-jpa-pagination-sorting)
+- [DB Integration Tests with Spring Boot and Testcontainers](https://www.baeldung.com/spring-boot-testcontainers-integration-test)
- [A Guide to Spring’s Open Session In View](https://www.baeldung.com/spring-open-session-in-view)
-- [Programmatic Transaction Management in Spring](https://www.baeldung.com/spring-programmatic-transaction-management)
-- [JPA Entity Lifecycle Events](https://www.baeldung.com/jpa-entity-lifecycle-events)
- [Working with Lazy Element Collections in JPA](https://www.baeldung.com/java-jpa-lazy-collections)
-- [Calling Stored Procedures from Spring Data JPA Repositories](https://www.baeldung.com/spring-data-jpa-stored-procedures)
- [Custom Naming Convention with Spring Data JPA](https://www.baeldung.com/spring-data-jpa-custom-naming)
+- [Partial Data Update with Spring Data](https://www.baeldung.com/spring-data-partial-update)
### Eclipse Config
After importing the project into Eclipse, you may see the following error:
@@ -16,3 +21,4 @@ This can be ignored:
- Project -> Properties -> Java Persistance -> JPA -> Error/Warnings -> Select Ignore on "No persistence xml file found in project"
Or:
- Eclipse -> Preferences - Validation - disable the "Build" execution of the JPA Validator
+
diff --git a/persistence-modules/spring-data-jpa-5/pom.xml b/persistence-modules/spring-data-jpa-enterprise/pom.xml
similarity index 71%
rename from persistence-modules/spring-data-jpa-5/pom.xml
rename to persistence-modules/spring-data-jpa-enterprise/pom.xml
index db58a16062..093059ad78 100644
--- a/persistence-modules/spring-data-jpa-5/pom.xml
+++ b/persistence-modules/spring-data-jpa-enterprise/pom.xml
@@ -3,8 +3,8 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- spring-data-jpa-5
- spring-data-jpa-5
+ spring-data-jpa-enterprise
+ spring-data-jpa-enterprise
com.baeldung
@@ -38,14 +38,39 @@
com.h2database
h2
+
+
+ org.hibernate
+ hibernate-envers
+
+
+ com.google.guava
+ guava
+ ${guava.version}
+
+
org.mapstruct
mapstruct-jdk8
${mapstruct.version}
provided
+
+
+ org.springframework.security
+ spring-security-test
+ test
+
+
+
+ org.testcontainers
+ postgresql
+ ${testcontainers.version}
+ test
+
+
@@ -75,6 +100,8 @@
1.1.1.RELEASE
2.1.9.RELEASE
1.3.1.Final
+ 21.0
+ 1.12.2
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/MultipleDbApplication.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/Application.java
similarity index 58%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/MultipleDbApplication.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/Application.java
index 3b9aa2cc18..3ea3d113da 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/MultipleDbApplication.java
+++ b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/Application.java
@@ -1,14 +1,13 @@
-package com.baeldung.multipledb;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-
-@SpringBootApplication
-public class MultipleDbApplication {
-
- public static void main(String[] args) {
- SpringApplication.run(MultipleDbApplication.class, args);
- }
-
-}
-
+package com.baeldung;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+
+}
diff --git a/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/Application.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/Application.java
new file mode 100644
index 0000000000..aaca760499
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/Application.java
@@ -0,0 +1,17 @@
+package com.baeldung.boot;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.domain.EntityScan;
+import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
+
+@SpringBootApplication
+@EnableJpaRepositories("com.baeldung")
+@EntityScan("com.baeldung")
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+
+}
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/config/PersistenceConfiguration.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/config/PersistenceConfiguration.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/config/PersistenceConfiguration.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/config/PersistenceConfiguration.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/IBarCrudRepository.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/daos/IBarCrudRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/IBarCrudRepository.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/daos/IBarCrudRepository.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/IFooDao.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/daos/IFooDao.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/IFooDao.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/daos/IFooDao.java
diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/daos/user/UserRepository.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/daos/user/UserRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/daos/user/UserRepository.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/daos/user/UserRepository.java
diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/daos/user/UserRepositoryCustom.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/daos/user/UserRepositoryCustom.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/daos/user/UserRepositoryCustom.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/daos/user/UserRepositoryCustom.java
diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/daos/user/UserRepositoryCustomImpl.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/daos/user/UserRepositoryCustomImpl.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/daos/user/UserRepositoryCustomImpl.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/daos/user/UserRepositoryCustomImpl.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Bar.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/domain/Bar.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Bar.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/domain/Bar.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Foo.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/domain/Foo.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Foo.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/domain/Foo.java
diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/domain/Possession.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/domain/Possession.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/domain/Possession.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/domain/Possession.java
diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/domain/User.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/domain/User.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/domain/User.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/domain/User.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/IBarService.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/services/IBarService.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/IBarService.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/services/IBarService.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/IFooService.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/services/IFooService.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/IFooService.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/services/IFooService.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/IOperations.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/services/IOperations.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/IOperations.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/services/IOperations.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/impl/AbstractService.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/services/impl/AbstractService.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/impl/AbstractService.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/services/impl/AbstractService.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/impl/AbstractSpringDataJpaService.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/services/impl/AbstractSpringDataJpaService.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/impl/AbstractSpringDataJpaService.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/services/impl/AbstractSpringDataJpaService.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/impl/BarSpringDataJpaService.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/services/impl/BarSpringDataJpaService.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/impl/BarSpringDataJpaService.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/services/impl/BarSpringDataJpaService.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/impl/FooService.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/services/impl/FooService.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/impl/FooService.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/boot/services/impl/FooService.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/elementcollection/ElementCollectionApplication.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/elementcollection/ElementCollectionApplication.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/elementcollection/ElementCollectionApplication.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/elementcollection/ElementCollectionApplication.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/elementcollection/model/Employee.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/elementcollection/model/Employee.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/elementcollection/model/Employee.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/elementcollection/model/Employee.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/elementcollection/model/Phone.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/elementcollection/model/Phone.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/elementcollection/model/Phone.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/elementcollection/model/Phone.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/elementcollection/repository/EmployeeRepository.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/elementcollection/repository/EmployeeRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/elementcollection/repository/EmployeeRepository.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/elementcollection/repository/EmployeeRepository.java
diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/multipledb/MultipleDbApplication.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/multipledb/MultipleDbApplication.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/multipledb/MultipleDbApplication.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/multipledb/MultipleDbApplication.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/PersistenceProductAutoConfiguration.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/multipledb/PersistenceProductAutoConfiguration.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/PersistenceProductAutoConfiguration.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/multipledb/PersistenceProductAutoConfiguration.java
diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/multipledb/PersistenceProductConfiguration.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/multipledb/PersistenceProductConfiguration.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/multipledb/PersistenceProductConfiguration.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/multipledb/PersistenceProductConfiguration.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/PersistenceUserAutoConfiguration.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/multipledb/PersistenceUserAutoConfiguration.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/PersistenceUserAutoConfiguration.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/multipledb/PersistenceUserAutoConfiguration.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/PersistenceUserConfiguration.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/multipledb/PersistenceUserConfiguration.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/PersistenceUserConfiguration.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/multipledb/PersistenceUserConfiguration.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/dao/product/ProductRepository.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/multipledb/dao/product/ProductRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/dao/product/ProductRepository.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/multipledb/dao/product/ProductRepository.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/dao/user/PossessionRepository.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/multipledb/dao/user/PossessionRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/dao/user/PossessionRepository.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/multipledb/dao/user/PossessionRepository.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/dao/user/UserRepository.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/multipledb/dao/user/UserRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/dao/user/UserRepository.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/multipledb/dao/user/UserRepository.java
diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/multipledb/model/product/Product.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/multipledb/model/product/Product.java
old mode 100644
new mode 100755
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/multipledb/model/product/Product.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/multipledb/model/product/Product.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/model/user/PossessionMultipleDB.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/multipledb/model/user/PossessionMultipleDB.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/model/user/PossessionMultipleDB.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/multipledb/model/user/PossessionMultipleDB.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/model/user/UserMultipleDB.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/multipledb/model/user/UserMultipleDB.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/model/user/UserMultipleDB.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/multipledb/model/user/UserMultipleDB.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/namingstrategy/Person.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/namingstrategy/Person.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/namingstrategy/Person.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/namingstrategy/Person.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/namingstrategy/PersonRepository.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/namingstrategy/PersonRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/namingstrategy/PersonRepository.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/namingstrategy/PersonRepository.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/namingstrategy/QuotedLowerCaseNamingStrategy.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/namingstrategy/QuotedLowerCaseNamingStrategy.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/namingstrategy/QuotedLowerCaseNamingStrategy.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/namingstrategy/QuotedLowerCaseNamingStrategy.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/namingstrategy/QuotedUpperCaseNamingStrategy.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/namingstrategy/QuotedUpperCaseNamingStrategy.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/namingstrategy/QuotedUpperCaseNamingStrategy.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/namingstrategy/QuotedUpperCaseNamingStrategy.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/namingstrategy/SpringDataJpaNamingConventionApplication.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/namingstrategy/SpringDataJpaNamingConventionApplication.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/namingstrategy/SpringDataJpaNamingConventionApplication.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/namingstrategy/SpringDataJpaNamingConventionApplication.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/namingstrategy/UnquotedLowerCaseNamingStrategy.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/namingstrategy/UnquotedLowerCaseNamingStrategy.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/namingstrategy/UnquotedLowerCaseNamingStrategy.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/namingstrategy/UnquotedLowerCaseNamingStrategy.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/namingstrategy/UnquotedUpperCaseNamingStrategy.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/namingstrategy/UnquotedUpperCaseNamingStrategy.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/namingstrategy/UnquotedUpperCaseNamingStrategy.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/namingstrategy/UnquotedUpperCaseNamingStrategy.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/osiv/OsivApplication.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/osiv/OsivApplication.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/osiv/OsivApplication.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/osiv/OsivApplication.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/osiv/model/BasicUser.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/osiv/model/BasicUser.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/osiv/model/BasicUser.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/osiv/model/BasicUser.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/osiv/repository/BasicUserRepository.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/osiv/repository/BasicUserRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/osiv/repository/BasicUserRepository.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/osiv/repository/BasicUserRepository.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/osiv/service/SimpleUserService.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/osiv/service/SimpleUserService.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/osiv/service/SimpleUserService.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/osiv/service/SimpleUserService.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/osiv/service/UserService.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/osiv/service/UserService.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/osiv/service/UserService.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/osiv/service/UserService.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/osiv/web/DetailedUserDto.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/osiv/web/DetailedUserDto.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/osiv/web/DetailedUserDto.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/osiv/web/DetailedUserDto.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/osiv/web/UserController.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/osiv/web/UserController.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/osiv/web/UserController.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/osiv/web/UserController.java
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/partialupdate/PartialUpdateApplication.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/partialupdate/PartialUpdateApplication.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/partialupdate/PartialUpdateApplication.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/partialupdate/PartialUpdateApplication.java
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/partialupdate/model/ContactPhone.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/partialupdate/model/ContactPhone.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/partialupdate/model/ContactPhone.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/partialupdate/model/ContactPhone.java
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/partialupdate/model/Customer.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/partialupdate/model/Customer.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/partialupdate/model/Customer.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/partialupdate/model/Customer.java
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/partialupdate/model/CustomerDto.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/partialupdate/model/CustomerDto.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/partialupdate/model/CustomerDto.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/partialupdate/model/CustomerDto.java
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/partialupdate/model/CustomerStructured.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/partialupdate/model/CustomerStructured.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/partialupdate/model/CustomerStructured.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/partialupdate/model/CustomerStructured.java
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/partialupdate/repository/ContactPhoneRepository.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/partialupdate/repository/ContactPhoneRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/partialupdate/repository/ContactPhoneRepository.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/partialupdate/repository/ContactPhoneRepository.java
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/partialupdate/repository/CustomerRepository.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/partialupdate/repository/CustomerRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/partialupdate/repository/CustomerRepository.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/partialupdate/repository/CustomerRepository.java
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/partialupdate/repository/CustomerStructuredRepository.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/partialupdate/repository/CustomerStructuredRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/partialupdate/repository/CustomerStructuredRepository.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/partialupdate/repository/CustomerStructuredRepository.java
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/partialupdate/service/CustomerService.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/partialupdate/service/CustomerService.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/partialupdate/service/CustomerService.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/partialupdate/service/CustomerService.java
diff --git a/persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/partialupdate/util/CustomerMapper.java b/persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/partialupdate/util/CustomerMapper.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-5/src/main/java/com/baeldung/partialupdate/util/CustomerMapper.java
rename to persistence-modules/spring-data-jpa-enterprise/src/main/java/com/baeldung/partialupdate/util/CustomerMapper.java
diff --git a/persistence-modules/spring-data-jpa-5/src/main/resources/application.properties b/persistence-modules/spring-data-jpa-enterprise/src/main/resources/application.properties
similarity index 76%
rename from persistence-modules/spring-data-jpa-5/src/main/resources/application.properties
rename to persistence-modules/spring-data-jpa-enterprise/src/main/resources/application.properties
index f55ad438ff..29326c6061 100644
--- a/persistence-modules/spring-data-jpa-5/src/main/resources/application.properties
+++ b/persistence-modules/spring-data-jpa-enterprise/src/main/resources/application.properties
@@ -10,4 +10,7 @@ spring.datasource.url=jdbc:h2:mem:baeldung
#spring.jpa.properties.hibernate.format_sql=true
spring.jpa.show-sql=true
+spring.main.allow-bean-definition-overriding=true
+#hibernate.dialect=org.hibernate.dialect.H2Dialect
+spring.jpa.properties.hibernate.id.new_generator_mappings=false
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa/src/main/resources/persistence-multiple-db-boot.properties b/persistence-modules/spring-data-jpa-enterprise/src/main/resources/persistence-multiple-db-boot.properties
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/resources/persistence-multiple-db-boot.properties
rename to persistence-modules/spring-data-jpa-enterprise/src/main/resources/persistence-multiple-db-boot.properties
diff --git a/persistence-modules/spring-data-jpa-3/src/main/resources/persistence-multiple-db.properties b/persistence-modules/spring-data-jpa-enterprise/src/main/resources/persistence-multiple-db.properties
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/main/resources/persistence-multiple-db.properties
rename to persistence-modules/spring-data-jpa-enterprise/src/main/resources/persistence-multiple-db.properties
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/SpringContextTest.java b/persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/SpringContextTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/SpringContextTest.java
rename to persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/SpringContextTest.java
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/SpringJpaContextIntegrationTest.java b/persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/SpringJpaContextIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/SpringJpaContextIntegrationTest.java
rename to persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/SpringJpaContextIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/boot/daos/UserRepositoryCommon.java b/persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/boot/daos/UserRepositoryCommon.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/boot/daos/UserRepositoryCommon.java
rename to persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/boot/daos/UserRepositoryCommon.java
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/UserRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/boot/daos/UserRepositoryIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/UserRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/boot/daos/UserRepositoryIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/boot/daos/UserRepositoryTCAutoLiveTest.java b/persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/boot/daos/UserRepositoryTCAutoLiveTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/boot/daos/UserRepositoryTCAutoLiveTest.java
rename to persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/boot/daos/UserRepositoryTCAutoLiveTest.java
diff --git a/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/boot/daos/UserRepositoryTCLiveTest.java b/persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/boot/daos/UserRepositoryTCLiveTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/boot/daos/UserRepositoryTCLiveTest.java
rename to persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/boot/daos/UserRepositoryTCLiveTest.java
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/services/AbstractServicePersistenceIntegrationTest.java b/persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/boot/services/AbstractServicePersistenceIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/services/AbstractServicePersistenceIntegrationTest.java
rename to persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/boot/services/AbstractServicePersistenceIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/services/FooServicePersistenceIntegrationTest.java b/persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/boot/services/FooServicePersistenceIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/services/FooServicePersistenceIntegrationTest.java
rename to persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/boot/services/FooServicePersistenceIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/services/SpringDataJPABarAuditIntegrationTest.java b/persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/boot/services/SpringDataJPABarAuditIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/services/SpringDataJPABarAuditIntegrationTest.java
rename to persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/boot/services/SpringDataJPABarAuditIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/elementcollection/ElementCollectionIntegrationTest.java b/persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/elementcollection/ElementCollectionIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/elementcollection/ElementCollectionIntegrationTest.java
rename to persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/elementcollection/ElementCollectionIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/multipledb/JpaMultipleDBIntegrationTest.java b/persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/multipledb/JpaMultipleDBIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/multipledb/JpaMultipleDBIntegrationTest.java
rename to persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/multipledb/JpaMultipleDBIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/multipledb/ProductRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/multipledb/ProductRepositoryIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/multipledb/ProductRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/multipledb/ProductRepositoryIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/namingstrategy/QuotedLowerCaseNamingStrategyH2IntegrationTest.java b/persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/namingstrategy/QuotedLowerCaseNamingStrategyH2IntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/namingstrategy/QuotedLowerCaseNamingStrategyH2IntegrationTest.java
rename to persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/namingstrategy/QuotedLowerCaseNamingStrategyH2IntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/namingstrategy/QuotedLowerCaseNamingStrategyPostgresLiveTest.java b/persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/namingstrategy/QuotedLowerCaseNamingStrategyPostgresLiveTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/namingstrategy/QuotedLowerCaseNamingStrategyPostgresLiveTest.java
rename to persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/namingstrategy/QuotedLowerCaseNamingStrategyPostgresLiveTest.java
diff --git a/persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/namingstrategy/QuotedUpperCaseNamingStrategyH2IntegrationTest.java b/persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/namingstrategy/QuotedUpperCaseNamingStrategyH2IntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/namingstrategy/QuotedUpperCaseNamingStrategyH2IntegrationTest.java
rename to persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/namingstrategy/QuotedUpperCaseNamingStrategyH2IntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/namingstrategy/QuotedUpperCaseNamingStrategyPostgresLiveTest.java b/persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/namingstrategy/QuotedUpperCaseNamingStrategyPostgresLiveTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/namingstrategy/QuotedUpperCaseNamingStrategyPostgresLiveTest.java
rename to persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/namingstrategy/QuotedUpperCaseNamingStrategyPostgresLiveTest.java
diff --git a/persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/namingstrategy/SpringPhysicalNamingStrategyH2IntegrationTest.java b/persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/namingstrategy/SpringPhysicalNamingStrategyH2IntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/namingstrategy/SpringPhysicalNamingStrategyH2IntegrationTest.java
rename to persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/namingstrategy/SpringPhysicalNamingStrategyH2IntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/namingstrategy/SpringPhysicalNamingStrategyPostgresLiveTest.java b/persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/namingstrategy/SpringPhysicalNamingStrategyPostgresLiveTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/namingstrategy/SpringPhysicalNamingStrategyPostgresLiveTest.java
rename to persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/namingstrategy/SpringPhysicalNamingStrategyPostgresLiveTest.java
diff --git a/persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/namingstrategy/UnquotedLowerCaseNamingStrategyH2IntegrationTest.java b/persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/namingstrategy/UnquotedLowerCaseNamingStrategyH2IntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/namingstrategy/UnquotedLowerCaseNamingStrategyH2IntegrationTest.java
rename to persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/namingstrategy/UnquotedLowerCaseNamingStrategyH2IntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/namingstrategy/UnquotedLowerCaseNamingStrategyPostgresLiveTest.java b/persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/namingstrategy/UnquotedLowerCaseNamingStrategyPostgresLiveTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/namingstrategy/UnquotedLowerCaseNamingStrategyPostgresLiveTest.java
rename to persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/namingstrategy/UnquotedLowerCaseNamingStrategyPostgresLiveTest.java
diff --git a/persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/namingstrategy/UnquotedUpperCaseNamingStrategyH2IntegrationTest.java b/persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/namingstrategy/UnquotedUpperCaseNamingStrategyH2IntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/namingstrategy/UnquotedUpperCaseNamingStrategyH2IntegrationTest.java
rename to persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/namingstrategy/UnquotedUpperCaseNamingStrategyH2IntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/namingstrategy/UnquotedUpperCaseNamingStrategyPostgresLiveTest.java b/persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/namingstrategy/UnquotedUpperCaseNamingStrategyPostgresLiveTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/namingstrategy/UnquotedUpperCaseNamingStrategyPostgresLiveTest.java
rename to persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/namingstrategy/UnquotedUpperCaseNamingStrategyPostgresLiveTest.java
diff --git a/persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/osiv/UserControllerIntegrationTest.java b/persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/osiv/UserControllerIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/osiv/UserControllerIntegrationTest.java
rename to persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/osiv/UserControllerIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-5/src/test/java/com/baeldung/partialupdate/PartialUpdateUnitTest.java b/persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/partialupdate/PartialUpdateUnitTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-5/src/test/java/com/baeldung/partialupdate/PartialUpdateUnitTest.java
rename to persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/partialupdate/PartialUpdateUnitTest.java
diff --git a/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/util/BaeldungPostgresqlContainer.java b/persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/util/BaeldungPostgresqlContainer.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/util/BaeldungPostgresqlContainer.java
rename to persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/util/BaeldungPostgresqlContainer.java
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/util/IDUtil.java b/persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/util/IDUtil.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/util/IDUtil.java
rename to persistence-modules/spring-data-jpa-enterprise/src/test/java/com/baeldung/util/IDUtil.java
diff --git a/persistence-modules/spring-data-jpa-5/src/test/resources/application-test.properties b/persistence-modules/spring-data-jpa-enterprise/src/test/resources/application-test.properties
similarity index 100%
rename from persistence-modules/spring-data-jpa-5/src/test/resources/application-test.properties
rename to persistence-modules/spring-data-jpa-enterprise/src/test/resources/application-test.properties
diff --git a/persistence-modules/spring-data-jpa-4/src/test/resources/com/baeldung/namingstrategy/quoted-lower-case-naming-strategy-on-postgres.properties b/persistence-modules/spring-data-jpa-enterprise/src/test/resources/com/baeldung/namingstrategy/quoted-lower-case-naming-strategy-on-postgres.properties
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/test/resources/com/baeldung/namingstrategy/quoted-lower-case-naming-strategy-on-postgres.properties
rename to persistence-modules/spring-data-jpa-enterprise/src/test/resources/com/baeldung/namingstrategy/quoted-lower-case-naming-strategy-on-postgres.properties
diff --git a/persistence-modules/spring-data-jpa-4/src/test/resources/com/baeldung/namingstrategy/quoted-lower-case-naming-strategy.properties b/persistence-modules/spring-data-jpa-enterprise/src/test/resources/com/baeldung/namingstrategy/quoted-lower-case-naming-strategy.properties
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/test/resources/com/baeldung/namingstrategy/quoted-lower-case-naming-strategy.properties
rename to persistence-modules/spring-data-jpa-enterprise/src/test/resources/com/baeldung/namingstrategy/quoted-lower-case-naming-strategy.properties
diff --git a/persistence-modules/spring-data-jpa-4/src/test/resources/com/baeldung/namingstrategy/quoted-upper-case-naming-strategy-on-postgres.properties b/persistence-modules/spring-data-jpa-enterprise/src/test/resources/com/baeldung/namingstrategy/quoted-upper-case-naming-strategy-on-postgres.properties
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/test/resources/com/baeldung/namingstrategy/quoted-upper-case-naming-strategy-on-postgres.properties
rename to persistence-modules/spring-data-jpa-enterprise/src/test/resources/com/baeldung/namingstrategy/quoted-upper-case-naming-strategy-on-postgres.properties
diff --git a/persistence-modules/spring-data-jpa-4/src/test/resources/com/baeldung/namingstrategy/quoted-upper-case-naming-strategy.properties b/persistence-modules/spring-data-jpa-enterprise/src/test/resources/com/baeldung/namingstrategy/quoted-upper-case-naming-strategy.properties
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/test/resources/com/baeldung/namingstrategy/quoted-upper-case-naming-strategy.properties
rename to persistence-modules/spring-data-jpa-enterprise/src/test/resources/com/baeldung/namingstrategy/quoted-upper-case-naming-strategy.properties
diff --git a/persistence-modules/spring-data-jpa-4/src/test/resources/com/baeldung/namingstrategy/spring-physical-naming-strategy-on-postgres.properties b/persistence-modules/spring-data-jpa-enterprise/src/test/resources/com/baeldung/namingstrategy/spring-physical-naming-strategy-on-postgres.properties
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/test/resources/com/baeldung/namingstrategy/spring-physical-naming-strategy-on-postgres.properties
rename to persistence-modules/spring-data-jpa-enterprise/src/test/resources/com/baeldung/namingstrategy/spring-physical-naming-strategy-on-postgres.properties
diff --git a/persistence-modules/spring-data-jpa-4/src/test/resources/com/baeldung/namingstrategy/spring-physical-naming-strategy.properties b/persistence-modules/spring-data-jpa-enterprise/src/test/resources/com/baeldung/namingstrategy/spring-physical-naming-strategy.properties
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/test/resources/com/baeldung/namingstrategy/spring-physical-naming-strategy.properties
rename to persistence-modules/spring-data-jpa-enterprise/src/test/resources/com/baeldung/namingstrategy/spring-physical-naming-strategy.properties
diff --git a/persistence-modules/spring-data-jpa-4/src/test/resources/com/baeldung/namingstrategy/unquoted-lower-case-naming-strategy-on-postgres.properties b/persistence-modules/spring-data-jpa-enterprise/src/test/resources/com/baeldung/namingstrategy/unquoted-lower-case-naming-strategy-on-postgres.properties
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/test/resources/com/baeldung/namingstrategy/unquoted-lower-case-naming-strategy-on-postgres.properties
rename to persistence-modules/spring-data-jpa-enterprise/src/test/resources/com/baeldung/namingstrategy/unquoted-lower-case-naming-strategy-on-postgres.properties
diff --git a/persistence-modules/spring-data-jpa-4/src/test/resources/com/baeldung/namingstrategy/unquoted-lower-case-naming-strategy.properties b/persistence-modules/spring-data-jpa-enterprise/src/test/resources/com/baeldung/namingstrategy/unquoted-lower-case-naming-strategy.properties
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/test/resources/com/baeldung/namingstrategy/unquoted-lower-case-naming-strategy.properties
rename to persistence-modules/spring-data-jpa-enterprise/src/test/resources/com/baeldung/namingstrategy/unquoted-lower-case-naming-strategy.properties
diff --git a/persistence-modules/spring-data-jpa-4/src/test/resources/com/baeldung/namingstrategy/unquoted-upper-case-naming-strategy-on-postgres.properties b/persistence-modules/spring-data-jpa-enterprise/src/test/resources/com/baeldung/namingstrategy/unquoted-upper-case-naming-strategy-on-postgres.properties
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/test/resources/com/baeldung/namingstrategy/unquoted-upper-case-naming-strategy-on-postgres.properties
rename to persistence-modules/spring-data-jpa-enterprise/src/test/resources/com/baeldung/namingstrategy/unquoted-upper-case-naming-strategy-on-postgres.properties
diff --git a/persistence-modules/spring-data-jpa-4/src/test/resources/com/baeldung/namingstrategy/unquoted-upper-case-naming-strategy.properties b/persistence-modules/spring-data-jpa-enterprise/src/test/resources/com/baeldung/namingstrategy/unquoted-upper-case-naming-strategy.properties
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/test/resources/com/baeldung/namingstrategy/unquoted-upper-case-naming-strategy.properties
rename to persistence-modules/spring-data-jpa-enterprise/src/test/resources/com/baeldung/namingstrategy/unquoted-upper-case-naming-strategy.properties
diff --git a/persistence-modules/spring-data-jpa-filtering/README.md b/persistence-modules/spring-data-jpa-filtering/README.md
new file mode 100644
index 0000000000..fe2f181154
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-filtering/README.md
@@ -0,0 +1,19 @@
+## Spring Data JPA - Filtering
+
+This module contains articles about filtering data using Spring Data JPA
+
+### Relevant Articles:
+- [An Advanced Tagging Implementation with JPA](https://www.baeldung.com/jpa-tagging-advanced)
+- [A Simple Tagging Implementation with JPA](https://www.baeldung.com/jpa-tagging)
+- [Spring Data JPA and Null Parameters](https://www.baeldung.com/spring-data-jpa-null-parameters)
+- [Spring Data JPA Projections](https://www.baeldung.com/spring-data-jpa-projections)
+
+### Eclipse Config
+After importing the project into Eclipse, you may see the following error:
+"No persistence xml file found in project"
+
+This can be ignored:
+- Project -> Properties -> Java Persistance -> JPA -> Error/Warnings -> Select Ignore on "No persistence xml file found in project"
+Or:
+- Eclipse -> Preferences - Validation - disable the "Build" execution of the JPA Validator
+
diff --git a/persistence-modules/spring-data-jpa/pom.xml b/persistence-modules/spring-data-jpa-filtering/pom.xml
similarity index 96%
rename from persistence-modules/spring-data-jpa/pom.xml
rename to persistence-modules/spring-data-jpa-filtering/pom.xml
index ddd7e17dcd..2039ef1a37 100644
--- a/persistence-modules/spring-data-jpa/pom.xml
+++ b/persistence-modules/spring-data-jpa-filtering/pom.xml
@@ -2,8 +2,8 @@
4.0.0
- spring-data-jpa
- spring-data-jpa
+ spring-data-jpa-filtering
+ spring-data-jpa-filtering
com.baeldung
diff --git a/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/Application.java b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/Application.java
new file mode 100644
index 0000000000..3ea3d113da
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/Application.java
@@ -0,0 +1,13 @@
+package com.baeldung;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+
+}
diff --git a/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/config/StudentJpaConfig.java b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/config/StudentJpaConfig.java
new file mode 100644
index 0000000000..08f37ea806
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/config/StudentJpaConfig.java
@@ -0,0 +1,68 @@
+package com.baeldung.config;
+
+import java.util.Properties;
+
+import javax.persistence.EntityManagerFactory;
+import javax.sql.DataSource;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.core.env.Environment;
+import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
+import org.springframework.jdbc.datasource.DriverManagerDataSource;
+import org.springframework.orm.jpa.JpaTransactionManager;
+import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
+import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+@Configuration
+@EnableJpaRepositories(basePackages = "com.baeldung.inmemory.persistence.dao")
+@PropertySource("persistence-student.properties")
+@EnableTransactionManagement
+public class StudentJpaConfig {
+
+ @Autowired
+ private Environment env;
+
+ @Bean
+ public DataSource dataSource() {
+ final DriverManagerDataSource dataSource = new DriverManagerDataSource();
+ dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName"));
+ dataSource.setUrl(env.getProperty("jdbc.url"));
+ dataSource.setUsername(env.getProperty("jdbc.user"));
+ dataSource.setPassword(env.getProperty("jdbc.pass"));
+
+ return dataSource;
+ }
+
+ @Bean
+ public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
+ final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
+ em.setDataSource(dataSource());
+ em.setPackagesToScan(new String[] { "com.baeldung.inmemory.persistence.model" });
+ em.setJpaVendorAdapter(new HibernateJpaVendorAdapter());
+ em.setJpaProperties(additionalProperties());
+ return em;
+ }
+
+ @Bean
+ JpaTransactionManager transactionManager(EntityManagerFactory entityManagerFactory) {
+ JpaTransactionManager transactionManager = new JpaTransactionManager();
+ transactionManager.setEntityManagerFactory(entityManagerFactory);
+ return transactionManager;
+ }
+
+ final Properties additionalProperties() {
+ final Properties hibernateProperties = new Properties();
+
+ hibernateProperties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
+ hibernateProperties.setProperty("hibernate.dialect", env.getProperty("hibernate.dialect"));
+ hibernateProperties.setProperty("hibernate.show_sql", env.getProperty("hibernate.show_sql"));
+ hibernateProperties.setProperty("hibernate.cache.use_second_level_cache", env.getProperty("hibernate.cache.use_second_level_cache"));
+ hibernateProperties.setProperty("hibernate.cache.use_query_cache", env.getProperty("hibernate.cache.use_query_cache"));
+
+ return hibernateProperties;
+ }
+}
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/entity/Customer.java b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/entity/Customer.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/entity/Customer.java
rename to persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/entity/Customer.java
diff --git a/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/inmemory/persistence/dao/ManyStudentRepository.java b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/inmemory/persistence/dao/ManyStudentRepository.java
new file mode 100644
index 0000000000..a2aa0c5780
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/inmemory/persistence/dao/ManyStudentRepository.java
@@ -0,0 +1,10 @@
+package com.baeldung.inmemory.persistence.dao;
+
+import com.baeldung.inmemory.persistence.model.ManyStudent;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.List;
+
+public interface ManyStudentRepository extends JpaRepository {
+ List findByManyTags_Name(String name);
+}
diff --git a/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/inmemory/persistence/dao/ManyTagRepository.java b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/inmemory/persistence/dao/ManyTagRepository.java
new file mode 100644
index 0000000000..63337f3cb9
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/inmemory/persistence/dao/ManyTagRepository.java
@@ -0,0 +1,7 @@
+package com.baeldung.inmemory.persistence.dao;
+
+import com.baeldung.inmemory.persistence.model.ManyTag;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface ManyTagRepository extends JpaRepository {
+}
diff --git a/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/inmemory/persistence/dao/StudentRepository.java b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/inmemory/persistence/dao/StudentRepository.java
new file mode 100644
index 0000000000..8ac91fbf0c
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/inmemory/persistence/dao/StudentRepository.java
@@ -0,0 +1,24 @@
+package com.baeldung.inmemory.persistence.dao;
+
+import com.baeldung.inmemory.persistence.model.Student;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+
+import java.util.List;
+
+public interface StudentRepository extends JpaRepository {
+
+ @Query("SELECT s FROM Student s JOIN s.tags t WHERE t = LOWER(:tag)")
+ List retrieveByTag(@Param("tag") String tag);
+
+ @Query("SELECT s FROM Student s JOIN s.tags t WHERE s.name = LOWER(:name) AND t = LOWER(:tag)")
+ List retrieveByNameFilterByTag(@Param("name") String name, @Param("tag") String tag);
+
+ @Query("SELECT s FROM Student s JOIN s.skillTags t WHERE t.name = LOWER(:tagName) AND t.value > :tagValue")
+ List retrieveByNameFilterByMinimumSkillTag(@Param("tagName") String tagName, @Param("tagValue") int tagValue);
+
+ @Query("SELECT s FROM Student s JOIN s.kvTags t WHERE t.key = LOWER(:key)")
+ List retrieveByKeyTag(@Param("key") String key);
+
+}
diff --git a/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/inmemory/persistence/model/KVTag.java b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/inmemory/persistence/model/KVTag.java
new file mode 100644
index 0000000000..1fc186f4ce
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/inmemory/persistence/model/KVTag.java
@@ -0,0 +1,34 @@
+package com.baeldung.inmemory.persistence.model;
+
+import javax.persistence.Embeddable;
+
+@Embeddable
+public class KVTag {
+ private String key;
+ private String value;
+
+ public KVTag() {
+ }
+
+ public KVTag(String key, String value) {
+ super();
+ this.key = key;
+ this.value = value;
+ }
+
+ public String getKey() {
+ return key;
+ }
+
+ public void setKey(String key) {
+ this.key = key;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+}
diff --git a/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/inmemory/persistence/model/LocationTag.java b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/inmemory/persistence/model/LocationTag.java
new file mode 100644
index 0000000000..b12ad9fbd1
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/inmemory/persistence/model/LocationTag.java
@@ -0,0 +1,40 @@
+package com.baeldung.inmemory.persistence.model;
+
+import javax.persistence.Embeddable;
+
+@Embeddable
+public class LocationTag {
+ private String name;
+ private int xPos;
+ private int yPos;
+
+ public LocationTag() {
+ }
+
+ public LocationTag(String name, int xPos, int yPos) {
+ super();
+ this.name = name;
+ this.xPos = xPos;
+ this.yPos = yPos;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public int getxPos() {
+ return xPos;
+ }
+
+ public void setxPos(int xPos) {
+ this.xPos = xPos;
+ }
+
+ public int getyPos() {
+ return yPos;
+ }
+
+ public void setyPos(int yPos) {
+ this.yPos = yPos;
+ }
+}
diff --git a/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/inmemory/persistence/model/ManyStudent.java b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/inmemory/persistence/model/ManyStudent.java
new file mode 100644
index 0000000000..190740d582
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/inmemory/persistence/model/ManyStudent.java
@@ -0,0 +1,33 @@
+package com.baeldung.inmemory.persistence.model;
+
+import javax.persistence.*;
+import java.util.HashSet;
+import java.util.Set;
+
+@Entity
+public class ManyStudent {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private int id;
+ private String name;
+
+ @ManyToMany(cascade = CascadeType.ALL)
+ @JoinTable(name = "manystudent_manytags", joinColumns = @JoinColumn(name = "manystudent_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "manytag_id", referencedColumnName = "id"))
+ private Set manyTags = new HashSet<>();
+
+ public ManyStudent() {
+ }
+
+ public ManyStudent(String name) {
+ this.name = name;
+ }
+
+ public Set getManyTags() {
+ return manyTags;
+ }
+
+ public void setManyTags(Set manyTags) {
+ this.manyTags.addAll(manyTags);
+ }
+}
diff --git a/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/inmemory/persistence/model/ManyTag.java b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/inmemory/persistence/model/ManyTag.java
new file mode 100644
index 0000000000..5af898f7df
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/inmemory/persistence/model/ManyTag.java
@@ -0,0 +1,40 @@
+package com.baeldung.inmemory.persistence.model;
+
+import javax.persistence.*;
+import java.util.HashSet;
+import java.util.Set;
+
+@Entity
+public class ManyTag {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ private int id;
+ private String name;
+
+ @ManyToMany(mappedBy = "manyTags")
+ private Set students = new HashSet<>();
+
+ public ManyTag() {
+ }
+
+ public ManyTag(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Set getStudents() {
+ return students;
+ }
+
+ public void setStudents(Set students) {
+ this.students.addAll(students);
+ }
+}
diff --git a/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/inmemory/persistence/model/SkillTag.java b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/inmemory/persistence/model/SkillTag.java
new file mode 100644
index 0000000000..738b5d0b36
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/inmemory/persistence/model/SkillTag.java
@@ -0,0 +1,30 @@
+package com.baeldung.inmemory.persistence.model;
+
+import javax.persistence.Embeddable;
+
+@Embeddable
+public class SkillTag {
+ private String name;
+ private int value;
+
+ public SkillTag() {
+ }
+
+ public SkillTag(String name, int value) {
+ super();
+ this.name = name;
+ this.value = value;
+ }
+
+ public int getValue() {
+ return value;
+ }
+
+ public void setValue(int value) {
+ this.value = value;
+ }
+
+ public String getName() {
+ return name;
+ }
+}
diff --git a/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/inmemory/persistence/model/Student.java b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/inmemory/persistence/model/Student.java
new file mode 100644
index 0000000000..f0e824e165
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/inmemory/persistence/model/Student.java
@@ -0,0 +1,74 @@
+package com.baeldung.inmemory.persistence.model;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.persistence.ElementCollection;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+@Entity
+public class Student {
+
+ @Id
+ private long id;
+ private String name;
+
+ @ElementCollection
+ private List tags = new ArrayList<>();
+
+ @ElementCollection
+ private List skillTags = new ArrayList<>();
+
+ @ElementCollection
+ private List kvTags = new ArrayList<>();
+
+ public Student() {
+ }
+
+ public Student(long id, String name) {
+ super();
+ this.id = id;
+ this.name = name;
+ }
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public List getTags() {
+ return tags;
+ }
+
+ public void setTags(List tags) {
+ this.tags.addAll(tags);
+ }
+
+ public List getSkillTags() {
+ return skillTags;
+ }
+
+ public void setSkillTags(List skillTags) {
+ this.skillTags.addAll(skillTags);
+ }
+
+ public List getKVTags() {
+ return this.kvTags;
+ }
+
+ public void setKVTags(List kvTags) {
+ this.kvTags.addAll(kvTags);
+ }
+
+}
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/projection/model/Address.java b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/projection/model/Address.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/projection/model/Address.java
rename to persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/projection/model/Address.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/projection/model/Person.java b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/projection/model/Person.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/projection/model/Person.java
rename to persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/projection/model/Person.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/projection/repository/AddressRepository.java b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/projection/repository/AddressRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/projection/repository/AddressRepository.java
rename to persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/projection/repository/AddressRepository.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/projection/repository/PersonRepository.java b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/projection/repository/PersonRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/projection/repository/PersonRepository.java
rename to persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/projection/repository/PersonRepository.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/projection/view/AddressView.java b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/projection/view/AddressView.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/projection/view/AddressView.java
rename to persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/projection/view/AddressView.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/projection/view/PersonDto.java b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/projection/view/PersonDto.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/projection/view/PersonDto.java
rename to persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/projection/view/PersonDto.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/projection/view/PersonView.java b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/projection/view/PersonView.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/projection/view/PersonView.java
rename to persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/projection/view/PersonView.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/repository/CustomerRepository.java b/persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/repository/CustomerRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/repository/CustomerRepository.java
rename to persistence-modules/spring-data-jpa-filtering/src/main/java/com/baeldung/repository/CustomerRepository.java
diff --git a/persistence-modules/spring-data-jpa-filtering/src/main/resources/persistence-student.properties b/persistence-modules/spring-data-jpa-filtering/src/main/resources/persistence-student.properties
new file mode 100644
index 0000000000..d4c82420de
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-filtering/src/main/resources/persistence-student.properties
@@ -0,0 +1,11 @@
+jdbc.driverClassName=com.mysql.cj.jdbc.Driver
+jdbc.url=jdbc:mysql://localhost:3306/myDb
+jdbc.user=tutorialuser
+jdbc.pass=tutorialpass
+
+hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
+hibernate.show_sql=true
+hibernate.hbm2ddl.auto=create-drop
+
+hibernate.cache.use_second_level_cache=false
+hibernate.cache.use_query_cache=false
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa-filtering/src/test/java/com/baeldung/persistence/repository/AdvancedTaggingIntegrationTest.java b/persistence-modules/spring-data-jpa-filtering/src/test/java/com/baeldung/persistence/repository/AdvancedTaggingIntegrationTest.java
new file mode 100644
index 0000000000..e98c1fa4a6
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-filtering/src/test/java/com/baeldung/persistence/repository/AdvancedTaggingIntegrationTest.java
@@ -0,0 +1,83 @@
+package com.baeldung.persistence.repository;
+
+import com.baeldung.config.StudentJpaConfig;
+import com.baeldung.inmemory.persistence.dao.ManyStudentRepository;
+import com.baeldung.inmemory.persistence.dao.ManyTagRepository;
+import com.baeldung.inmemory.persistence.dao.StudentRepository;
+import com.baeldung.inmemory.persistence.model.ManyStudent;
+import com.baeldung.inmemory.persistence.model.ManyTag;
+import com.baeldung.inmemory.persistence.model.SkillTag;
+import com.baeldung.inmemory.persistence.model.Student;
+import com.baeldung.inmemory.persistence.model.KVTag;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.support.AnnotationConfigContextLoader;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(classes = { StudentJpaConfig.class }, loader = AnnotationConfigContextLoader.class)
+@Transactional
+@DirtiesContext
+public class AdvancedTaggingIntegrationTest {
+ @Resource
+ private StudentRepository studentRepository;
+
+ @Resource
+ private ManyStudentRepository manyStudentRepository;
+
+ @Resource
+ private ManyTagRepository manyTagRepository;
+
+ @Test
+ public void givenStudentWithSkillTags_whenSave_thenGetByNameAndSkillTag() {
+ Student student = new Student(1, "Will");
+ SkillTag skill1 = new SkillTag("java", 5);
+ student.setSkillTags(Arrays.asList(skill1));
+ studentRepository.save(student);
+
+ Student student2 = new Student(2, "Joe");
+ SkillTag skill2 = new SkillTag("java", 1);
+ student2.setSkillTags(Arrays.asList(skill2));
+ studentRepository.save(student2);
+
+ List students = studentRepository.retrieveByNameFilterByMinimumSkillTag("java", 3);
+ assertEquals("size incorrect", 1, students.size());
+ }
+
+ @Test
+ public void givenStudentWithKVTags_whenSave_thenGetByTagOk() {
+ Student student = new Student(0, "John");
+ student.setKVTags(Arrays.asList(new KVTag("department", "computer science")));
+ studentRepository.save(student);
+
+ Student student2 = new Student(1, "James");
+ student2.setKVTags(Arrays.asList(new KVTag("department", "humanities")));
+ studentRepository.save(student2);
+
+ List students = studentRepository.retrieveByKeyTag("department");
+ assertEquals("size incorrect", 2, students.size());
+ }
+
+ @Test
+ public void givenStudentWithManyTags_whenSave_theyGetByTagOk() {
+ ManyTag tag = new ManyTag("full time");
+ manyTagRepository.save(tag);
+
+ ManyStudent student = new ManyStudent("John");
+ student.setManyTags(Collections.singleton(tag));
+ manyStudentRepository.save(student);
+
+ List students = manyStudentRepository.findByManyTags_Name("full time");
+ assertEquals("size incorrect", 1, students.size());
+ }
+}
diff --git a/persistence-modules/spring-data-jpa-filtering/src/test/java/com/baeldung/persistence/repository/InMemoryDBIntegrationTest.java b/persistence-modules/spring-data-jpa-filtering/src/test/java/com/baeldung/persistence/repository/InMemoryDBIntegrationTest.java
new file mode 100644
index 0000000000..d8d867792e
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-filtering/src/test/java/com/baeldung/persistence/repository/InMemoryDBIntegrationTest.java
@@ -0,0 +1,84 @@
+package com.baeldung.persistence.repository;
+
+import com.baeldung.config.StudentJpaConfig;
+import com.baeldung.inmemory.persistence.dao.StudentRepository;
+import com.baeldung.inmemory.persistence.model.Student;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.support.AnnotationConfigContextLoader;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+
+import java.util.Arrays;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(classes = { StudentJpaConfig.class }, loader = AnnotationConfigContextLoader.class)
+@Transactional
+@DirtiesContext
+public class InMemoryDBIntegrationTest {
+
+ @Resource
+ private StudentRepository studentRepository;
+
+ private static final long ID = 1;
+ private static final String NAME = "john";
+
+ @Test
+ public void givenStudent_whenSave_thenGetOk() {
+ Student student = new Student(ID, NAME);
+ studentRepository.save(student);
+
+ Student student2 = studentRepository.findById(ID).get();
+ assertEquals("name incorrect", NAME, student2.getName());
+ }
+
+ @Test
+ public void givenStudentWithTags_whenSave_thenGetByTagOk() {
+ Student student = new Student(ID, NAME);
+ student.setTags(Arrays.asList("full time", "computer science"));
+ studentRepository.save(student);
+
+ Student student2 = studentRepository.retrieveByTag("full time").get(0);
+ assertEquals("name incorrect", NAME, student2.getName());
+ }
+
+ @Test
+ public void givenMultipleStudentsWithTags_whenSave_thenGetByTagReturnsCorrectCount() {
+ Student student = new Student(0, "Larry");
+ student.setTags(Arrays.asList("full time", "computer science"));
+ studentRepository.save(student);
+
+ Student student2 = new Student(1, "Curly");
+ student2.setTags(Arrays.asList("part time", "rocket science"));
+ studentRepository.save(student2);
+
+ Student student3 = new Student(2, "Moe");
+ student3.setTags(Arrays.asList("full time", "philosophy"));
+ studentRepository.save(student3);
+
+ Student student4 = new Student(3, "Shemp");
+ student4.setTags(Arrays.asList("part time", "mathematics"));
+ studentRepository.save(student4);
+
+ List students = studentRepository.retrieveByTag("full time");
+ assertEquals("size incorrect", 2, students.size());
+ }
+
+ @Test
+ public void givenStudentWithTags_whenSave_thenGetByNameAndTagOk() {
+ Student student = new Student(ID, NAME);
+ student.setTags(Arrays.asList("full time", "computer science"));
+ studentRepository.save(student);
+
+ Student student2 = studentRepository.retrieveByNameFilterByTag("John", "full time").get(0);
+ assertEquals("name incorrect", NAME, student2.getName());
+ }
+
+}
diff --git a/persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/projection/JpaProjectionIntegrationTest.java b/persistence-modules/spring-data-jpa-filtering/src/test/java/com/baeldung/projection/JpaProjectionIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/projection/JpaProjectionIntegrationTest.java
rename to persistence-modules/spring-data-jpa-filtering/src/test/java/com/baeldung/projection/JpaProjectionIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/repository/CustomerRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-filtering/src/test/java/com/baeldung/repository/CustomerRepositoryIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/repository/CustomerRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-jpa-filtering/src/test/java/com/baeldung/repository/CustomerRepositoryIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-filtering/src/test/resources/persistence-student.properties b/persistence-modules/spring-data-jpa-filtering/src/test/resources/persistence-student.properties
new file mode 100644
index 0000000000..3b6b580630
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-filtering/src/test/resources/persistence-student.properties
@@ -0,0 +1,9 @@
+jdbc.driverClassName=org.h2.Driver
+jdbc.url=jdbc:h2:mem:myDb;DB_CLOSE_DELAY=-1
+
+hibernate.dialect=org.hibernate.dialect.H2Dialect
+hibernate.show_sql=true
+hibernate.hbm2ddl.auto=create
+
+hibernate.cache.use_second_level_cache=false
+hibernate.cache.use_query_cache=false
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa-2/src/test/resources/projection-clean-up-data.sql b/persistence-modules/spring-data-jpa-filtering/src/test/resources/projection-clean-up-data.sql
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/test/resources/projection-clean-up-data.sql
rename to persistence-modules/spring-data-jpa-filtering/src/test/resources/projection-clean-up-data.sql
diff --git a/persistence-modules/spring-data-jpa-2/src/test/resources/projection-insert-data.sql b/persistence-modules/spring-data-jpa-filtering/src/test/resources/projection-insert-data.sql
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/test/resources/projection-insert-data.sql
rename to persistence-modules/spring-data-jpa-filtering/src/test/resources/projection-insert-data.sql
diff --git a/persistence-modules/spring-data-jpa-query/README.md b/persistence-modules/spring-data-jpa-query/README.md
new file mode 100644
index 0000000000..bfff3c0ef3
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-query/README.md
@@ -0,0 +1,22 @@
+## Spring Data JPA - Query
+
+This module contains articles about querying data using Spring Data JPA
+
+### Relevant Articles:
+- [Query Entities by Dates and Times with Spring Data JPA](https://www.baeldung.com/spring-data-jpa-query-by-date)
+- [The Exists Query in Spring Data](https://www.baeldung.com/spring-data-exists-query)
+- [Customizing the Result of JPA Queries with Aggregation Functions](https://www.baeldung.com/jpa-queries-custom-result-with-aggregation-functions)
+- [Limiting Query Results with JPA and Spring Data JPA](https://www.baeldung.com/jpa-limit-query-results)
+- [Sorting Query Results with Spring Data](https://www.baeldung.com/spring-data-sorting)
+- [Spring Data JPA Query by Example](https://www.baeldung.com/spring-data-query-by-example)
+- [JPA Join Types](https://www.baeldung.com/jpa-join-types)
+- [Spring Data JPA and Named Entity Graphs](https://www.baeldung.com/spring-data-jpa-named-entity-graphs)
+
+### Eclipse Config
+After importing the project into Eclipse, you may see the following error:
+"No persistence xml file found in project"
+
+This can be ignored:
+- Project -> Properties -> Java Persistance -> JPA -> Error/Warnings -> Select Ignore on "No persistence xml file found in project"
+Or:
+- Eclipse -> Preferences - Validation - disable the "Build" execution of the JPA Validator
diff --git a/persistence-modules/spring-data-jpa-2/pom.xml b/persistence-modules/spring-data-jpa-query/pom.xml
similarity index 90%
rename from persistence-modules/spring-data-jpa-2/pom.xml
rename to persistence-modules/spring-data-jpa-query/pom.xml
index 838327de89..71498143c3 100644
--- a/persistence-modules/spring-data-jpa-2/pom.xml
+++ b/persistence-modules/spring-data-jpa-query/pom.xml
@@ -3,8 +3,8 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- spring-data-jpa-2
- spring-data-jpa-2
+ spring-data-jpa-query
+ spring-data-jpa-query
com.baeldung
diff --git a/persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/Application.java b/persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/Application.java
new file mode 100644
index 0000000000..3ea3d113da
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/Application.java
@@ -0,0 +1,13 @@
+package com.baeldung;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class Application {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Application.class, args);
+ }
+
+}
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/model/Comment.java b/persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/aggregation/model/Comment.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/model/Comment.java
rename to persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/aggregation/model/Comment.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/model/Post.java b/persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/aggregation/model/Post.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/model/Post.java
rename to persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/aggregation/model/Post.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/model/custom/CommentCount.java b/persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/aggregation/model/custom/CommentCount.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/model/custom/CommentCount.java
rename to persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/aggregation/model/custom/CommentCount.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/model/custom/ICommentCount.java b/persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/aggregation/model/custom/ICommentCount.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/model/custom/ICommentCount.java
rename to persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/aggregation/model/custom/ICommentCount.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/repository/CommentRepository.java b/persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/aggregation/repository/CommentRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/aggregation/repository/CommentRepository.java
rename to persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/aggregation/repository/CommentRepository.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/ArticleRepository.java b/persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/boot/daos/ArticleRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/ArticleRepository.java
rename to persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/boot/daos/ArticleRepository.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Article.java b/persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/boot/domain/Article.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Article.java
rename to persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/boot/domain/Article.java
diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/passenger/CustomPassengerRepository.java b/persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/boot/passenger/CustomPassengerRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/passenger/CustomPassengerRepository.java
rename to persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/boot/passenger/CustomPassengerRepository.java
diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/passenger/Passenger.java b/persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/boot/passenger/Passenger.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/passenger/Passenger.java
rename to persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/boot/passenger/Passenger.java
diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/passenger/PassengerRepository.java b/persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/boot/passenger/PassengerRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/passenger/PassengerRepository.java
rename to persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/boot/passenger/PassengerRepository.java
diff --git a/persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/passenger/PassengerRepositoryImpl.java b/persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/boot/passenger/PassengerRepositoryImpl.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/main/java/com/baeldung/boot/passenger/PassengerRepositoryImpl.java
rename to persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/boot/passenger/PassengerRepositoryImpl.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/entitygraph/model/Characteristic.java b/persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/entitygraph/model/Characteristic.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/entitygraph/model/Characteristic.java
rename to persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/entitygraph/model/Characteristic.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/entitygraph/model/Item.java b/persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/entitygraph/model/Item.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/entitygraph/model/Item.java
rename to persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/entitygraph/model/Item.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/entitygraph/repository/CharacteristicsRepository.java b/persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/entitygraph/repository/CharacteristicsRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/entitygraph/repository/CharacteristicsRepository.java
rename to persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/entitygraph/repository/CharacteristicsRepository.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/entitygraph/repository/ItemRepository.java b/persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/entitygraph/repository/ItemRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/entitygraph/repository/ItemRepository.java
rename to persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/entitygraph/repository/ItemRepository.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/exists/Car.java b/persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/exists/Car.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/exists/Car.java
rename to persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/exists/Car.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/exists/CarRepository.java b/persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/exists/CarRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/exists/CarRepository.java
rename to persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/exists/CarRepository.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/joins/model/Department.java b/persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/joins/model/Department.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/joins/model/Department.java
rename to persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/joins/model/Department.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/joins/model/Employee.java b/persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/joins/model/Employee.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/joins/model/Employee.java
rename to persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/joins/model/Employee.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/joins/model/Phone.java b/persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/joins/model/Phone.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/joins/model/Phone.java
rename to persistence-modules/spring-data-jpa-query/src/main/java/com/baeldung/joins/model/Phone.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/resources/apple-fruit-data.xml b/persistence-modules/spring-data-jpa-query/src/main/resources/apple-fruit-data.xml
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/resources/apple-fruit-data.xml
rename to persistence-modules/spring-data-jpa-query/src/main/resources/apple-fruit-data.xml
diff --git a/persistence-modules/spring-data-jpa-2/src/main/resources/application-joins.properties b/persistence-modules/spring-data-jpa-query/src/main/resources/application-joins.properties
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/resources/application-joins.properties
rename to persistence-modules/spring-data-jpa-query/src/main/resources/application-joins.properties
diff --git a/persistence-modules/spring-data-jpa-2/src/main/resources/application.properties b/persistence-modules/spring-data-jpa-query/src/main/resources/application.properties
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/resources/application.properties
rename to persistence-modules/spring-data-jpa-query/src/main/resources/application.properties
diff --git a/persistence-modules/spring-data-jpa-2/src/main/resources/db/import_joins.sql b/persistence-modules/spring-data-jpa-query/src/main/resources/db/import_joins.sql
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/resources/db/import_joins.sql
rename to persistence-modules/spring-data-jpa-query/src/main/resources/db/import_joins.sql
diff --git a/persistence-modules/spring-data-jpa-2/src/main/resources/fruit-data.json b/persistence-modules/spring-data-jpa-query/src/main/resources/fruit-data.json
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/resources/fruit-data.json
rename to persistence-modules/spring-data-jpa-query/src/main/resources/fruit-data.json
diff --git a/persistence-modules/spring-data-jpa-2/src/main/resources/guava-fruit-data.xml b/persistence-modules/spring-data-jpa-query/src/main/resources/guava-fruit-data.xml
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/resources/guava-fruit-data.xml
rename to persistence-modules/spring-data-jpa-query/src/main/resources/guava-fruit-data.xml
diff --git a/persistence-modules/spring-data-jpa-query/src/main/resources/import_entities.sql b/persistence-modules/spring-data-jpa-query/src/main/resources/import_entities.sql
new file mode 100644
index 0000000000..4fe18bf4aa
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-query/src/main/resources/import_entities.sql
@@ -0,0 +1,3 @@
+insert into Article(id, publication_date, publication_time, creation_date_time) values(1, TO_DATE('01/01/2018', 'DD/MM/YYYY'), TO_DATE('15:00', 'HH24:MI'), TO_DATE('31/12/2017 07:30', 'DD/MM/YYYY HH24:MI'));
+insert into Article(id, publication_date, publication_time, creation_date_time) values(2, TO_DATE('01/01/2018', 'DD/MM/YYYY'), TO_DATE('15:30', 'HH24:MI'), TO_DATE('15/12/2017 08:00', 'DD/MM/YYYY HH24:MI'));
+insert into Article(id, publication_date, publication_time, creation_date_time) values(3, TO_DATE('15/12/2017', 'DD/MM/YYYY'), TO_DATE('16:00', 'HH24:MI'), TO_DATE('01/12/2017 13:45', 'DD/MM/YYYY HH24:MI'));
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/aggregation/SpringDataAggregateIntegrationTest.java b/persistence-modules/spring-data-jpa-query/src/test/java/com/baeldung/aggregation/SpringDataAggregateIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/aggregation/SpringDataAggregateIntegrationTest.java
rename to persistence-modules/spring-data-jpa-query/src/test/java/com/baeldung/aggregation/SpringDataAggregateIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/ArticleRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-query/src/test/java/com/baeldung/boot/daos/ArticleRepositoryIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/ArticleRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-jpa-query/src/test/java/com/baeldung/boot/daos/ArticleRepositoryIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/boot/passenger/PassengerRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-query/src/test/java/com/baeldung/boot/passenger/PassengerRepositoryIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-3/src/test/java/com/baeldung/boot/passenger/PassengerRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-jpa-query/src/test/java/com/baeldung/boot/passenger/PassengerRepositoryIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/entitygraph/EntityGraphIntegrationTest.java b/persistence-modules/spring-data-jpa-query/src/test/java/com/baeldung/entitygraph/EntityGraphIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/entitygraph/EntityGraphIntegrationTest.java
rename to persistence-modules/spring-data-jpa-query/src/test/java/com/baeldung/entitygraph/EntityGraphIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/exists/CarRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-query/src/test/java/com/baeldung/exists/CarRepositoryIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/exists/CarRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-jpa-query/src/test/java/com/baeldung/exists/CarRepositoryIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/joins/JpaJoinsIntegrationTest.java b/persistence-modules/spring-data-jpa-query/src/test/java/com/baeldung/joins/JpaJoinsIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/joins/JpaJoinsIntegrationTest.java
rename to persistence-modules/spring-data-jpa-query/src/test/java/com/baeldung/joins/JpaJoinsIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-2/src/test/resources/entitygraph-data.sql b/persistence-modules/spring-data-jpa-query/src/test/resources/entitygraph-data.sql
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/test/resources/entitygraph-data.sql
rename to persistence-modules/spring-data-jpa-query/src/test/resources/entitygraph-data.sql
diff --git a/persistence-modules/spring-data-jpa-query/src/test/resources/projection-clean-up-data.sql b/persistence-modules/spring-data-jpa-query/src/test/resources/projection-clean-up-data.sql
new file mode 100644
index 0000000000..d34f6f0636
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-query/src/test/resources/projection-clean-up-data.sql
@@ -0,0 +1,2 @@
+DELETE FROM address;
+DELETE FROM person;
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa-query/src/test/resources/projection-insert-data.sql b/persistence-modules/spring-data-jpa-query/src/test/resources/projection-insert-data.sql
new file mode 100644
index 0000000000..544dcc4b88
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-query/src/test/resources/projection-insert-data.sql
@@ -0,0 +1,2 @@
+INSERT INTO person(id,first_name,last_name) VALUES (1,'John','Doe');
+INSERT INTO address(id,person_id,state,city,street,zip_code) VALUES (1,1,'CA', 'Los Angeles', 'Standford Ave', '90001');
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa-2/src/test/resources/test-aggregation-data.sql b/persistence-modules/spring-data-jpa-query/src/test/resources/test-aggregation-data.sql
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/test/resources/test-aggregation-data.sql
rename to persistence-modules/spring-data-jpa-query/src/test/resources/test-aggregation-data.sql
diff --git a/persistence-modules/spring-data-jpa-query/src/test/resources/test-fruit-data.sql b/persistence-modules/spring-data-jpa-query/src/test/resources/test-fruit-data.sql
new file mode 100644
index 0000000000..d99f42e5a7
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-query/src/test/resources/test-fruit-data.sql
@@ -0,0 +1,6 @@
+truncate table fruit;
+
+insert into fruit(id,name,color) values (1,'apple','red');
+insert into fruit(id,name,color) values (2,'custard apple','green');
+insert into fruit(id,name,color) values (3,'mango','yellow');
+insert into fruit(id,name,color) values (4,'guava','green');
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa/README.md b/persistence-modules/spring-data-jpa-repo/README.md
similarity index 53%
rename from persistence-modules/spring-data-jpa/README.md
rename to persistence-modules/spring-data-jpa-repo/README.md
index 1c43edf42b..284a7ac2b5 100644
--- a/persistence-modules/spring-data-jpa/README.md
+++ b/persistence-modules/spring-data-jpa-repo/README.md
@@ -1,18 +1,16 @@
-=========
+## Spring Data JPA - Repo
-## Spring Data JPA Example Project
+This module contains articles about repositories in Spring Data JPA
### Relevant Articles:
-- [Spring JPA – Multiple Databases](https://www.baeldung.com/spring-data-jpa-multiple-databases)
-- [Spring Data JPA – Adding a Method in All Repositories](https://www.baeldung.com/spring-data-jpa-method-in-all-repositories)
-- [An Advanced Tagging Implementation with JPA](https://www.baeldung.com/jpa-tagging-advanced)
-- [Spring Data Annotations](https://www.baeldung.com/spring-data-annotations)
-- [Spring Data Java 8 Support](https://www.baeldung.com/spring-data-java-8)
-- [A Simple Tagging Implementation with JPA](https://www.baeldung.com/jpa-tagging)
-- [Spring Data Composable Repositories](https://www.baeldung.com/spring-data-composable-repositories)
-- [Query Entities by Dates and Times with Spring Data JPA](https://www.baeldung.com/spring-data-jpa-query-by-date)
-- [DDD Aggregates and @DomainEvents](https://www.baeldung.com/spring-data-ddd)
+- [Case Insensitive Queries with Spring Data Repository](https://www.baeldung.com/spring-data-case-insensitive-queries)
+- [Derived Query Methods in Spring Data JPA Repositories](https://www.baeldung.com/spring-data-derived-queries)
+- [LIKE Queries in Spring JPA Repositories](https://www.baeldung.com/spring-jpa-like-queries)
- [Spring Data – CrudRepository save() Method](https://www.baeldung.com/spring-data-crud-repository-save)
+- [Spring Data JPA – Adding a Method in All Repositories](https://www.baeldung.com/spring-data-jpa-method-in-all-repositories)
+- [Spring Data Composable Repositories](https://www.baeldung.com/spring-data-composable-repositories)
+- [Spring Data JPA Repository Populators](https://www.baeldung.com/spring-data-jpa-repository-populators)
+- [Calling Stored Procedures from Spring Data JPA Repositories](https://www.baeldung.com/spring-data-jpa-stored-procedures)
### Eclipse Config
After importing the project into Eclipse, you may see the following error:
@@ -22,4 +20,3 @@ This can be ignored:
- Project -> Properties -> Java Persistance -> JPA -> Error/Warnings -> Select Ignore on "No persistence xml file found in project"
Or:
- Eclipse -> Preferences - Validation - disable the "Build" execution of the JPA Validator
-
diff --git a/persistence-modules/spring-data-jpa-4/pom.xml b/persistence-modules/spring-data-jpa-repo/pom.xml
similarity index 85%
rename from persistence-modules/spring-data-jpa-4/pom.xml
rename to persistence-modules/spring-data-jpa-repo/pom.xml
index 71fc21527f..984bc1bdff 100644
--- a/persistence-modules/spring-data-jpa-4/pom.xml
+++ b/persistence-modules/spring-data-jpa-repo/pom.xml
@@ -2,8 +2,8 @@
4.0.0
- spring-data-jpa-4
- spring-data-jpa-4
+ spring-data-jpa-repo
+ spring-data-jpa-repo
com.baeldung
@@ -42,6 +42,11 @@
com.h2database
h2
+
+
+ org.springframework
+ spring-oxm
+
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/Application.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/Application.java
similarity index 94%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/Application.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/Application.java
index c66921a3ca..47a18b557f 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/Application.java
+++ b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/Application.java
@@ -1,4 +1,4 @@
-package com.baeldung.boot;
+package com.baeldung;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/CustomItemRepository.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/daos/CustomItemRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/CustomItemRepository.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/daos/CustomItemRepository.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/CustomItemTypeRepository.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/daos/CustomItemTypeRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/CustomItemTypeRepository.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/daos/CustomItemTypeRepository.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/ExtendedRepository.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/daos/ExtendedRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/ExtendedRepository.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/daos/ExtendedRepository.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/ExtendedStudentRepository.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/daos/ExtendedStudentRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/ExtendedStudentRepository.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/daos/ExtendedStudentRepository.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/InventoryRepository.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/daos/InventoryRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/InventoryRepository.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/daos/InventoryRepository.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/ItemTypeRepository.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/daos/ItemTypeRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/ItemTypeRepository.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/daos/ItemTypeRepository.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/LocationRepository.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/daos/LocationRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/LocationRepository.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/daos/LocationRepository.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/ReadOnlyLocationRepository.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/daos/ReadOnlyLocationRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/ReadOnlyLocationRepository.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/daos/ReadOnlyLocationRepository.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/StoreRepository.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/daos/StoreRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/StoreRepository.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/daos/StoreRepository.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/impl/CustomItemRepositoryImpl.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/daos/impl/CustomItemRepositoryImpl.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/impl/CustomItemRepositoryImpl.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/daos/impl/CustomItemRepositoryImpl.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/impl/CustomItemTypeRepositoryImpl.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/daos/impl/CustomItemTypeRepositoryImpl.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/impl/CustomItemTypeRepositoryImpl.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/daos/impl/CustomItemTypeRepositoryImpl.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/impl/ExtendedRepositoryImpl.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/daos/impl/ExtendedRepositoryImpl.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/impl/ExtendedRepositoryImpl.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/daos/impl/ExtendedRepositoryImpl.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Item.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/domain/Item.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Item.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/domain/Item.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/ItemType.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/domain/ItemType.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/ItemType.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/domain/ItemType.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/KVTag.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/domain/KVTag.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/KVTag.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/domain/KVTag.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Location.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/domain/Location.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Location.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/domain/Location.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/MerchandiseEntity.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/domain/MerchandiseEntity.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/MerchandiseEntity.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/domain/MerchandiseEntity.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/SkillTag.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/domain/SkillTag.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/SkillTag.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/domain/SkillTag.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Store.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/domain/Store.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Store.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/domain/Store.java
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Student.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/domain/Student.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Student.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/boot/domain/Student.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/config/JpaPopulators.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/config/JpaPopulators.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/config/JpaPopulators.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/config/JpaPopulators.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/derivedquery/QueryApplication.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/derivedquery/QueryApplication.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/derivedquery/QueryApplication.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/derivedquery/QueryApplication.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/derivedquery/entity/User.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/derivedquery/entity/User.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/derivedquery/entity/User.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/derivedquery/entity/User.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/derivedquery/repository/UserRepository.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/derivedquery/repository/UserRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/derivedquery/repository/UserRepository.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/derivedquery/repository/UserRepository.java
diff --git a/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/entity/Fruit.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/entity/Fruit.java
new file mode 100644
index 0000000000..d45ac33db8
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/entity/Fruit.java
@@ -0,0 +1,40 @@
+package com.baeldung.entity;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement
+@Entity
+public class Fruit {
+
+ @Id
+ private long id;
+ private String name;
+ private String color;
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getColor() {
+ return color;
+ }
+
+ public void setColor(String color) {
+ this.color = color;
+ }
+
+}
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/entity/Passenger.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/entity/Passenger.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/entity/Passenger.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/entity/Passenger.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/entity/Song.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/entity/Song.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/entity/Song.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/entity/Song.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/like/LikeApplication.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/like/LikeApplication.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/like/LikeApplication.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/like/LikeApplication.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/like/model/Movie.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/like/model/Movie.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/like/model/Movie.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/like/model/Movie.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/like/repository/MovieRepository.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/like/repository/MovieRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/like/repository/MovieRepository.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/like/repository/MovieRepository.java
diff --git a/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/repository/FruitRepository.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/repository/FruitRepository.java
new file mode 100644
index 0000000000..5055252adf
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/repository/FruitRepository.java
@@ -0,0 +1,27 @@
+package com.baeldung.repository;
+
+import java.util.List;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.stereotype.Repository;
+
+import com.baeldung.entity.Fruit;
+
+@Repository
+public interface FruitRepository extends JpaRepository {
+
+ Long deleteByName(String name);
+
+ List deleteByColor(String color);
+
+ Long removeByName(String name);
+
+ List removeByColor(String color);
+
+ @Modifying
+ @Query("delete from Fruit f where f.name=:name or f.color=:color")
+ int deleteFruits(@Param("name") String name, @Param("color") String color);
+}
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/repository/PassengerRepository.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/repository/PassengerRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/repository/PassengerRepository.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/repository/PassengerRepository.java
diff --git a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/repository/SongRepository.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/repository/SongRepository.java
similarity index 99%
rename from persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/repository/SongRepository.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/repository/SongRepository.java
index ad887fe680..6faed411d3 100644
--- a/persistence-modules/spring-data-jpa-2/src/main/java/com/baeldung/repository/SongRepository.java
+++ b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/repository/SongRepository.java
@@ -1,10 +1,11 @@
package com.baeldung.repository;
-import com.baeldung.entity.Song;
+import java.util.List;
+
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
-import java.util.List;
+import com.baeldung.entity.Song;
@Repository
public interface SongRepository extends JpaRepository {
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/storedprocedure/StoredProcedureApplication.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/storedprocedure/StoredProcedureApplication.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/storedprocedure/StoredProcedureApplication.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/storedprocedure/StoredProcedureApplication.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/storedprocedure/controller/CarController.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/storedprocedure/controller/CarController.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/storedprocedure/controller/CarController.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/storedprocedure/controller/CarController.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/storedprocedure/entity/Car.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/storedprocedure/entity/Car.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/storedprocedure/entity/Car.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/storedprocedure/entity/Car.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/storedprocedure/repository/CarRepository.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/storedprocedure/repository/CarRepository.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/storedprocedure/repository/CarRepository.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/storedprocedure/repository/CarRepository.java
diff --git a/persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/storedprocedure/service/CarService.java b/persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/storedprocedure/service/CarService.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/java/com/baeldung/storedprocedure/service/CarService.java
rename to persistence-modules/spring-data-jpa-repo/src/main/java/com/baeldung/storedprocedure/service/CarService.java
diff --git a/persistence-modules/spring-data-jpa-repo/src/main/resources/apple-fruit-data.xml b/persistence-modules/spring-data-jpa-repo/src/main/resources/apple-fruit-data.xml
new file mode 100644
index 0000000000..d87ae28f1e
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-repo/src/main/resources/apple-fruit-data.xml
@@ -0,0 +1,7 @@
+
+
+
+ 1
+ apple
+ red
+
diff --git a/persistence-modules/spring-data-jpa-4/src/main/resources/application.properties b/persistence-modules/spring-data-jpa-repo/src/main/resources/application.properties
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/resources/application.properties
rename to persistence-modules/spring-data-jpa-repo/src/main/resources/application.properties
diff --git a/persistence-modules/spring-data-jpa-4/src/main/resources/car-mysql.sql b/persistence-modules/spring-data-jpa-repo/src/main/resources/car-mysql.sql
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/main/resources/car-mysql.sql
rename to persistence-modules/spring-data-jpa-repo/src/main/resources/car-mysql.sql
diff --git a/persistence-modules/spring-data-jpa-repo/src/main/resources/fruit-data.json b/persistence-modules/spring-data-jpa-repo/src/main/resources/fruit-data.json
new file mode 100644
index 0000000000..6dc44e2586
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-repo/src/main/resources/fruit-data.json
@@ -0,0 +1,14 @@
+[
+ {
+ "_class": "com.baeldung.entity.Fruit",
+ "name": "apple",
+ "color": "red",
+ "id": 1
+ },
+ {
+ "_class": "com.baeldung.entity.Fruit",
+ "name": "guava",
+ "color": "green",
+ "id": 2
+ }
+]
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa-repo/src/main/resources/guava-fruit-data.xml b/persistence-modules/spring-data-jpa-repo/src/main/resources/guava-fruit-data.xml
new file mode 100644
index 0000000000..ffd75bb4bb
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-repo/src/main/resources/guava-fruit-data.xml
@@ -0,0 +1,7 @@
+
+
+
+ 2
+ guava
+ green
+
diff --git a/persistence-modules/spring-data-jpa/src/main/resources/import_entities.sql b/persistence-modules/spring-data-jpa-repo/src/main/resources/import_entities.sql
similarity index 69%
rename from persistence-modules/spring-data-jpa/src/main/resources/import_entities.sql
rename to persistence-modules/spring-data-jpa-repo/src/main/resources/import_entities.sql
index deb9d07f05..6282fd1481 100644
--- a/persistence-modules/spring-data-jpa/src/main/resources/import_entities.sql
+++ b/persistence-modules/spring-data-jpa-repo/src/main/resources/import_entities.sql
@@ -1,7 +1,3 @@
-insert into Article(id, publication_date, publication_time, creation_date_time) values(1, TO_DATE('01/01/2018', 'DD/MM/YYYY'), TO_DATE('15:00', 'HH24:MI'), TO_DATE('31/12/2017 07:30', 'DD/MM/YYYY HH24:MI'));
-insert into Article(id, publication_date, publication_time, creation_date_time) values(2, TO_DATE('01/01/2018', 'DD/MM/YYYY'), TO_DATE('15:30', 'HH24:MI'), TO_DATE('15/12/2017 08:00', 'DD/MM/YYYY HH24:MI'));
-insert into Article(id, publication_date, publication_time, creation_date_time) values(3, TO_DATE('15/12/2017', 'DD/MM/YYYY'), TO_DATE('16:00', 'HH24:MI'), TO_DATE('01/12/2017 13:45', 'DD/MM/YYYY HH24:MI'));
-
insert into location (id, country, city) values (1, 'Country X', 'City One');
insert into location (id, country, city) values (2, 'Country X', 'City Two');
insert into location (id, country, city) values (3, 'Country X', 'City Three');
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/ExtendedStudentRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-repo/src/test/java/com/baeldung/boot/daos/ExtendedStudentRepositoryIntegrationTest.java
similarity index 97%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/ExtendedStudentRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-jpa-repo/src/test/java/com/baeldung/boot/daos/ExtendedStudentRepositoryIntegrationTest.java
index 71f92c94ab..b367b5fdca 100644
--- a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/ExtendedStudentRepositoryIntegrationTest.java
+++ b/persistence-modules/spring-data-jpa-repo/src/test/java/com/baeldung/boot/daos/ExtendedStudentRepositoryIntegrationTest.java
@@ -13,7 +13,7 @@ import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
-import com.baeldung.boot.Application;
+import com.baeldung.Application;
import com.baeldung.boot.domain.Student;
@RunWith(SpringRunner.class)
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/InventoryRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-repo/src/test/java/com/baeldung/boot/daos/InventoryRepositoryIntegrationTest.java
similarity index 98%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/InventoryRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-jpa-repo/src/test/java/com/baeldung/boot/daos/InventoryRepositoryIntegrationTest.java
index 5d73e261a4..22e2c81739 100644
--- a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/InventoryRepositoryIntegrationTest.java
+++ b/persistence-modules/spring-data-jpa-repo/src/test/java/com/baeldung/boot/daos/InventoryRepositoryIntegrationTest.java
@@ -12,7 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
-import com.baeldung.boot.Application;
+import com.baeldung.Application;
import com.baeldung.boot.domain.MerchandiseEntity;
@RunWith(SpringRunner.class)
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/JpaRepositoriesIntegrationTest.java b/persistence-modules/spring-data-jpa-repo/src/test/java/com/baeldung/boot/daos/JpaRepositoriesIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/JpaRepositoriesIntegrationTest.java
rename to persistence-modules/spring-data-jpa-repo/src/test/java/com/baeldung/boot/daos/JpaRepositoriesIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/derivedquery/repository/UserRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-repo/src/test/java/com/baeldung/derivedquery/repository/UserRepositoryIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/derivedquery/repository/UserRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-jpa-repo/src/test/java/com/baeldung/derivedquery/repository/UserRepositoryIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/like/MovieRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-repo/src/test/java/com/baeldung/like/MovieRepositoryIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/test/java/com/baeldung/like/MovieRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-jpa-repo/src/test/java/com/baeldung/like/MovieRepositoryIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/repository/FruitPopulatorIntegrationTest.java b/persistence-modules/spring-data-jpa-repo/src/test/java/com/baeldung/repository/FruitPopulatorIntegrationTest.java
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/repository/FruitPopulatorIntegrationTest.java
rename to persistence-modules/spring-data-jpa-repo/src/test/java/com/baeldung/repository/FruitPopulatorIntegrationTest.java
diff --git a/persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/repository/PassengerRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-repo/src/test/java/com/baeldung/repository/PassengerRepositoryIntegrationTest.java
similarity index 99%
rename from persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/repository/PassengerRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-jpa-repo/src/test/java/com/baeldung/repository/PassengerRepositoryIntegrationTest.java
index f96f0249d7..37fcef7dab 100644
--- a/persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/repository/PassengerRepositoryIntegrationTest.java
+++ b/persistence-modules/spring-data-jpa-repo/src/test/java/com/baeldung/repository/PassengerRepositoryIntegrationTest.java
@@ -1,6 +1,14 @@
package com.baeldung.repository;
-import com.baeldung.entity.Passenger;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.contains;
+import static org.hamcrest.core.IsNot.not;
+
+import java.util.List;
+
+import javax.persistence.EntityManager;
+import javax.persistence.PersistenceContext;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -8,13 +16,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.test.context.junit4.SpringRunner;
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-import java.util.List;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.contains;
-import static org.hamcrest.core.IsNot.not;
+import com.baeldung.entity.Passenger;
@DataJpaTest
@RunWith(SpringRunner.class)
diff --git a/persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/repository/SongRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-repo/src/test/java/com/baeldung/repository/SongRepositoryIntegrationTest.java
similarity index 97%
rename from persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/repository/SongRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-jpa-repo/src/test/java/com/baeldung/repository/SongRepositoryIntegrationTest.java
index 14912a4ecb..19362acd44 100644
--- a/persistence-modules/spring-data-jpa-2/src/test/java/com/baeldung/repository/SongRepositoryIntegrationTest.java
+++ b/persistence-modules/spring-data-jpa-repo/src/test/java/com/baeldung/repository/SongRepositoryIntegrationTest.java
@@ -13,6 +13,7 @@ import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;
import com.baeldung.entity.Song;
+import com.baeldung.repository.SongRepository;
@RunWith(SpringRunner.class)
@SpringBootTest
diff --git a/persistence-modules/spring-data-jpa-4/src/test/resources/application-test.properties b/persistence-modules/spring-data-jpa-repo/src/test/resources/application-test.properties
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/test/resources/application-test.properties
rename to persistence-modules/spring-data-jpa-repo/src/test/resources/application-test.properties
diff --git a/persistence-modules/spring-data-jpa-4/src/test/resources/test-movie-cleanup.sql b/persistence-modules/spring-data-jpa-repo/src/test/resources/test-movie-cleanup.sql
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/test/resources/test-movie-cleanup.sql
rename to persistence-modules/spring-data-jpa-repo/src/test/resources/test-movie-cleanup.sql
diff --git a/persistence-modules/spring-data-jpa-4/src/test/resources/test-movie-data.sql b/persistence-modules/spring-data-jpa-repo/src/test/resources/test-movie-data.sql
similarity index 100%
rename from persistence-modules/spring-data-jpa-4/src/test/resources/test-movie-data.sql
rename to persistence-modules/spring-data-jpa-repo/src/test/resources/test-movie-data.sql
diff --git a/persistence-modules/spring-data-jpa-2/src/test/resources/test-song-data.sql b/persistence-modules/spring-data-jpa-repo/src/test/resources/test-song-data.sql
similarity index 100%
rename from persistence-modules/spring-data-jpa-2/src/test/resources/test-song-data.sql
rename to persistence-modules/spring-data-jpa-repo/src/test/resources/test-song-data.sql
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/user/PossessionRepository.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/user/PossessionRepository.java
deleted file mode 100644
index e102754c18..0000000000
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/user/PossessionRepository.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.baeldung.boot.daos.user;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-
-import com.baeldung.boot.domain.Possession;
-
-public interface PossessionRepository extends JpaRepository {
-
-}
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/user/UserRepository.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/user/UserRepository.java
deleted file mode 100644
index 53f692ff28..0000000000
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/user/UserRepository.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package com.baeldung.boot.daos.user;
-
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.domain.Sort;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Modifying;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
-
-import com.baeldung.boot.domain.User;
-
-import java.time.LocalDate;
-import java.util.Collection;
-import java.util.List;
-import java.util.stream.Stream;
-
-public interface UserRepository extends JpaRepository , UserRepositoryCustom{
-
- Stream findAllByName(String name);
-
- @Query("SELECT u FROM User u WHERE u.status = 1")
- Collection findAllActiveUsers();
-
- @Query("select u from User u where u.email like '%@gmail.com'")
- List findUsersWithGmailAddress();
-
- @Query(value = "SELECT * FROM Users u WHERE u.status = 1", nativeQuery = true)
- Collection findAllActiveUsersNative();
-
- @Query("SELECT u FROM User u WHERE u.status = ?1")
- User findUserByStatus(Integer status);
-
- @Query(value = "SELECT * FROM Users u WHERE u.status = ?1", nativeQuery = true)
- User findUserByStatusNative(Integer status);
-
- @Query("SELECT u FROM User u WHERE u.status = ?1 and u.name = ?2")
- User findUserByStatusAndName(Integer status, String name);
-
- @Query("SELECT u FROM User u WHERE u.status = :status and u.name = :name")
- User findUserByStatusAndNameNamedParams(@Param("status") Integer status, @Param("name") String name);
-
- @Query(value = "SELECT * FROM Users u WHERE u.status = :status AND u.name = :name", nativeQuery = true)
- User findUserByStatusAndNameNamedParamsNative(@Param("status") Integer status, @Param("name") String name);
-
- @Query("SELECT u FROM User u WHERE u.status = :status and u.name = :name")
- User findUserByUserStatusAndUserName(@Param("status") Integer userStatus, @Param("name") String userName);
-
- @Query("SELECT u FROM User u WHERE u.name like ?1%")
- User findUserByNameLike(String name);
-
- @Query("SELECT u FROM User u WHERE u.name like :name%")
- User findUserByNameLikeNamedParam(@Param("name") String name);
-
- @Query(value = "SELECT * FROM users u WHERE u.name LIKE ?1%", nativeQuery = true)
- User findUserByNameLikeNative(String name);
-
- @Query(value = "SELECT u FROM User u")
- List findAllUsers(Sort sort);
-
- @Query(value = "SELECT u FROM User u ORDER BY id")
- Page findAllUsersWithPagination(Pageable pageable);
-
- @Query(value = "SELECT * FROM Users ORDER BY id", countQuery = "SELECT count(*) FROM Users", nativeQuery = true)
- Page findAllUsersWithPaginationNative(Pageable pageable);
-
- @Modifying
- @Query("update User u set u.status = :status where u.name = :name")
- int updateUserSetStatusForName(@Param("status") Integer status, @Param("name") String name);
-
- @Modifying
- @Query(value = "UPDATE Users u SET u.status = ? WHERE u.name = ?", nativeQuery = true)
- int updateUserSetStatusForNameNative(Integer status, String name);
-
- @Query(value = "INSERT INTO Users (name, age, email, status, active) VALUES (:name, :age, :email, :status, :active)", nativeQuery = true)
- @Modifying
- void insertUser(@Param("name") String name, @Param("age") Integer age, @Param("email") String email, @Param("status") Integer status, @Param("active") boolean active);
-
- @Modifying
- @Query(value = "UPDATE Users u SET status = ? WHERE u.name = ?", nativeQuery = true)
- int updateUserSetStatusForNameNativePostgres(Integer status, String name);
-
- @Query(value = "SELECT u FROM User u WHERE u.name IN :names")
- List findUserByNameList(@Param("names") Collection names);
-
- void deleteAllByCreationDateAfter(LocalDate date);
-
- @Modifying(clearAutomatically = true, flushAutomatically = true)
- @Query("update User u set u.active = false where u.lastLoginDate < :date")
- void deactivateUsersNotLoggedInSince(@Param("date") LocalDate date);
-
- @Modifying(clearAutomatically = true, flushAutomatically = true)
- @Query("delete User u where u.active = false")
- int deleteDeactivatedUsers();
-
- @Modifying(clearAutomatically = true, flushAutomatically = true)
- @Query(value = "alter table USERS add column deleted int(1) not null default 0", nativeQuery = true)
- void addDeletedColumn();
-}
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/user/UserRepositoryCustom.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/user/UserRepositoryCustom.java
deleted file mode 100644
index c586b54027..0000000000
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/user/UserRepositoryCustom.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.baeldung.boot.daos.user;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Set;
-import java.util.function.Predicate;
-
-import com.baeldung.boot.domain.User;
-
-public interface UserRepositoryCustom {
- List findUserByEmails(Set emails);
-
- List findAllUsersByPredicates(Collection> predicates);
-}
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/user/UserRepositoryCustomImpl.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/user/UserRepositoryCustomImpl.java
deleted file mode 100644
index 63a743b6b5..0000000000
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/user/UserRepositoryCustomImpl.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package com.baeldung.boot.daos.user;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Path;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-
-import com.baeldung.boot.domain.User;
-
-public class UserRepositoryCustomImpl implements UserRepositoryCustom {
-
- @PersistenceContext
- private EntityManager entityManager;
-
- @Override
- public List findUserByEmails(Set emails) {
- CriteriaBuilder cb = entityManager.getCriteriaBuilder();
- CriteriaQuery query = cb.createQuery(User.class);
- Root user = query.from(User.class);
-
- Path emailPath = user.get("email");
-
- List predicates = new ArrayList<>();
- for (String email : emails) {
-
- predicates.add(cb.like(emailPath, email));
-
- }
- query.select(user)
- .where(cb.or(predicates.toArray(new Predicate[predicates.size()])));
-
- return entityManager.createQuery(query)
- .getResultList();
- }
-
- @Override
- public List findAllUsersByPredicates(Collection> predicates) {
- List allUsers = entityManager.createQuery("select u from User u", User.class).getResultList();
- Stream allUsersStream = allUsers.stream();
- for (java.util.function.Predicate predicate : predicates) {
- allUsersStream = allUsersStream.filter(predicate);
- }
-
- return allUsersStream.collect(Collectors.toList());
- }
-
-}
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Possession.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Possession.java
deleted file mode 100644
index f13491ad82..0000000000
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Possession.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package com.baeldung.boot.domain;
-
-import javax.persistence.*;
-import com.baeldung.boot.domain.Possession;
-
-@Entity
-@Table
-public class Possession {
-
- @Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
- private long id;
-
- private String name;
-
- public Possession() {
- super();
- }
-
- public Possession(final String name) {
- super();
-
- this.name = name;
- }
-
- public long getId() {
- return id;
- }
-
- public void setId(final int id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(final String name) {
- this.name = name;
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = (prime * result) + (int) (id ^ (id >>> 32));
- result = (prime * result) + ((name == null) ? 0 : name.hashCode());
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- final Possession other = (Possession) obj;
- if (id != other.id) {
- return false;
- }
- if (name == null) {
- if (other.name != null) {
- return false;
- }
- } else if (!name.equals(other.name)) {
- return false;
- }
- return true;
- }
-
- @Override
- public String toString() {
- final StringBuilder builder = new StringBuilder();
- builder.append("Possesion [id=").append(id).append(", name=").append(name).append("]");
- return builder.toString();
- }
-
-}
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/User.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/User.java
deleted file mode 100644
index cca00e52a2..0000000000
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/User.java
+++ /dev/null
@@ -1,132 +0,0 @@
-package com.baeldung.boot.domain;
-
-import javax.persistence.*;
-
-import java.time.LocalDate;
-import java.util.List;
-import java.util.Objects;
-
-@Entity
-@Table(name = "users")
-public class User {
-
- @Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
- private int id;
- private String name;
- private LocalDate creationDate;
- private LocalDate lastLoginDate;
- private boolean active;
- private int age;
- @Column(unique = true, nullable = false)
- private String email;
- private Integer status;
- @OneToMany
- List possessionList;
-
- public User() {
- super();
- }
-
- public User(String name, LocalDate creationDate,String email, Integer status) {
- this.name = name;
- this.creationDate = creationDate;
- this.email = email;
- this.status = status;
- this.active = true;
- }
-
- public int getId() {
- return id;
- }
-
- public void setId(final int id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(final String name) {
- this.name = name;
- }
-
- public String getEmail() {
- return email;
- }
-
- public void setEmail(final String email) {
- this.email = email;
- }
-
- public Integer getStatus() {
- return status;
- }
-
- public void setStatus(Integer status) {
- this.status = status;
- }
-
- public int getAge() {
- return age;
- }
-
- public void setAge(final int age) {
- this.age = age;
- }
-
- public LocalDate getCreationDate() {
- return creationDate;
- }
-
- public List getPossessionList() {
- return possessionList;
- }
-
- public void setPossessionList(List possessionList) {
- this.possessionList = possessionList;
- }
-
- @Override
- public String toString() {
- final StringBuilder builder = new StringBuilder();
- builder.append("User [name=").append(name).append(", id=").append(id).append("]");
- return builder.toString();
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- User user = (User) o;
- return id == user.id &&
- age == user.age &&
- Objects.equals(name, user.name) &&
- Objects.equals(creationDate, user.creationDate) &&
- Objects.equals(email, user.email) &&
- Objects.equals(status, user.status);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(id, name, creationDate, age, email, status);
- }
-
- public LocalDate getLastLoginDate() {
- return lastLoginDate;
- }
-
- public void setLastLoginDate(LocalDate lastLoginDate) {
- this.lastLoginDate = lastLoginDate;
- }
-
- public boolean isActive() {
- return active;
- }
-
- public void setActive(boolean active) {
- this.active = active;
- }
-
-}
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/PersistenceProductConfiguration.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/PersistenceProductConfiguration.java
deleted file mode 100644
index bcf2cd84eb..0000000000
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/PersistenceProductConfiguration.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package com.baeldung.multipledb;
-
-import com.google.common.base.Preconditions;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Profile;
-import org.springframework.context.annotation.PropertySource;
-import org.springframework.core.env.Environment;
-import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
-import org.springframework.jdbc.datasource.DriverManagerDataSource;
-import org.springframework.orm.jpa.JpaTransactionManager;
-import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
-import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
-import org.springframework.transaction.PlatformTransactionManager;
-
-import javax.sql.DataSource;
-import java.util.HashMap;
-
-@Configuration
-@PropertySource({"classpath:persistence-multiple-db.properties"})
-@EnableJpaRepositories(basePackages = "com.baeldung.multipledb.dao.product", entityManagerFactoryRef = "productEntityManager", transactionManagerRef = "productTransactionManager")
-@Profile("!tc")
-public class PersistenceProductConfiguration {
- @Autowired
- private Environment env;
-
- public PersistenceProductConfiguration() {
- super();
- }
-
- //
-
- @Bean
- public LocalContainerEntityManagerFactoryBean productEntityManager() {
- final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
- em.setDataSource(productDataSource());
- em.setPackagesToScan("com.baeldung.multipledb.model.product");
-
- final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
- em.setJpaVendorAdapter(vendorAdapter);
- final HashMap properties = new HashMap();
- properties.put("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
- properties.put("hibernate.dialect", env.getProperty("hibernate.dialect"));
- em.setJpaPropertyMap(properties);
-
- return em;
- }
-
- @Bean
- public DataSource productDataSource() {
- final DriverManagerDataSource dataSource = new DriverManagerDataSource();
- dataSource.setDriverClassName(Preconditions.checkNotNull(env.getProperty("jdbc.driverClassName")));
- dataSource.setUrl(Preconditions.checkNotNull(env.getProperty("product.jdbc.url")));
- dataSource.setUsername(Preconditions.checkNotNull(env.getProperty("jdbc.user")));
- dataSource.setPassword(Preconditions.checkNotNull(env.getProperty("jdbc.pass")));
-
- return dataSource;
- }
-
- @Bean
- public PlatformTransactionManager productTransactionManager() {
- final JpaTransactionManager transactionManager = new JpaTransactionManager();
- transactionManager.setEntityManagerFactory(productEntityManager().getObject());
- return transactionManager;
- }
-
-}
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/model/product/Product.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/model/product/Product.java
deleted file mode 100755
index eaf471043c..0000000000
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/model/product/Product.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package com.baeldung.multipledb.model.product;
-
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
-
-@Entity
-@Table(schema = "products")
-public class Product {
-
- @Id
- private int id;
-
- private String name;
-
- private double price;
-
- public Product() {
- super();
- }
-
- private Product(int id, String name, double price) {
- super();
- this.id = id;
- this.name = name;
- this.price = price;
- }
-
- public static Product from(int id, String name, double price) {
- return new Product(id, name, price);
- }
-
- public int getId() {
- return id;
- }
-
- public void setId(final int id) {
- this.id = id;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(final String name) {
- this.name = name;
- }
-
- public double getPrice() {
- return price;
- }
-
- public void setPrice(final double price) {
- this.price = price;
- }
-
- @Override
- public String toString() {
- final StringBuilder builder = new StringBuilder();
- builder.append("Product [name=")
- .append(name)
- .append(", id=")
- .append(id)
- .append("]");
- return builder.toString();
- }
-}
diff --git a/persistence-modules/spring-data-jpa/src/main/resources/application.properties b/persistence-modules/spring-data-jpa/src/main/resources/application.properties
deleted file mode 100644
index f127dd5e50..0000000000
--- a/persistence-modules/spring-data-jpa/src/main/resources/application.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-spring.main.allow-bean-definition-overriding=true
-
-spring.jpa.properties.hibernate.jdbc.batch_size=4
-spring.jpa.properties.hibernate.order_inserts=true
-spring.jpa.properties.hibernate.order_updates=true
-spring.jpa.properties.hibernate.generate_statistics=true
diff --git a/persistence-modules/spring-data-jpa/src/main/resources/persistence-multiple-db.properties b/persistence-modules/spring-data-jpa/src/main/resources/persistence-multiple-db.properties
deleted file mode 100644
index 75534e8a54..0000000000
--- a/persistence-modules/spring-data-jpa/src/main/resources/persistence-multiple-db.properties
+++ /dev/null
@@ -1,13 +0,0 @@
-# jdbc.X
-jdbc.driverClassName=org.h2.Driver
-user.jdbc.url=jdbc:h2:mem:spring_jpa_user;DB_CLOSE_DELAY=-1;INIT=CREATE SCHEMA IF NOT EXISTS USERS
-product.jdbc.url=jdbc:h2:mem:spring_jpa_product;DB_CLOSE_DELAY=-1;INIT=CREATE SCHEMA IF NOT EXISTS PRODUCTS
-jdbc.user=sa
-jdbc.pass=sa
-
-# hibernate.X
-hibernate.dialect=org.hibernate.dialect.H2Dialect
-hibernate.show_sql=false
-hibernate.hbm2ddl.auto=create-drop
-hibernate.cache.use_second_level_cache=false
-hibernate.cache.use_query_cache=false
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/UserRepositoryCommon.java b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/UserRepositoryCommon.java
deleted file mode 100644
index b2581b8034..0000000000
--- a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/UserRepositoryCommon.java
+++ /dev/null
@@ -1,545 +0,0 @@
-package com.baeldung.boot.daos;
-
-import org.junit.After;
-import org.junit.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.data.domain.Sort;
-import org.springframework.data.jpa.domain.JpaSort;
-import org.springframework.data.mapping.PropertyReferenceException;
-import org.springframework.transaction.annotation.Transactional;
-
-import com.baeldung.boot.daos.user.UserRepository;
-import com.baeldung.boot.domain.User;
-
-import javax.persistence.EntityManager;
-import javax.persistence.Query;
-import java.time.LocalDate;
-import java.util.*;
-import java.util.function.Predicate;
-import java.util.stream.Stream;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.Assert.*;
-
-public class UserRepositoryCommon {
-
- final String USER_EMAIL = "email@example.com";
- final String USER_EMAIL2 = "email2@example.com";
- final String USER_EMAIL3 = "email3@example.com";
- final String USER_EMAIL4 = "email4@example.com";
- final Integer INACTIVE_STATUS = 0;
- final Integer ACTIVE_STATUS = 1;
- final String USER_EMAIL5 = "email5@example.com";
- final String USER_EMAIL6 = "email6@example.com";
- final String USER_NAME_ADAM = "Adam";
- final String USER_NAME_PETER = "Peter";
-
- @Autowired
- protected UserRepository userRepository;
- @Autowired
- private EntityManager entityManager;
-
- @Test
- @Transactional
- public void givenUsersWithSameNameInDB_WhenFindAllByName_ThenReturnStreamOfUsers() {
- User user1 = new User();
- user1.setName(USER_NAME_ADAM);
- user1.setEmail(USER_EMAIL);
- userRepository.save(user1);
-
- User user2 = new User();
- user2.setName(USER_NAME_ADAM);
- user2.setEmail(USER_EMAIL2);
- userRepository.save(user2);
-
- User user3 = new User();
- user3.setName(USER_NAME_ADAM);
- user3.setEmail(USER_EMAIL3);
- userRepository.save(user3);
-
- User user4 = new User();
- user4.setName("SAMPLE");
- user4.setEmail(USER_EMAIL4);
- userRepository.save(user4);
-
- try (Stream foundUsersStream = userRepository.findAllByName(USER_NAME_ADAM)) {
- assertThat(foundUsersStream.count()).isEqualTo(3l);
- }
- }
-
- @Test
- public void givenUsersInDB_WhenFindAllWithQueryAnnotation_ThenReturnCollectionWithActiveUsers() {
- User user1 = new User();
- user1.setName(USER_NAME_ADAM);
- user1.setEmail(USER_EMAIL);
- user1.setStatus(ACTIVE_STATUS);
- userRepository.save(user1);
-
- User user2 = new User();
- user2.setName(USER_NAME_ADAM);
- user2.setEmail(USER_EMAIL2);
- user2.setStatus(ACTIVE_STATUS);
- userRepository.save(user2);
-
- User user3 = new User();
- user3.setName(USER_NAME_ADAM);
- user3.setEmail(USER_EMAIL3);
- user3.setStatus(INACTIVE_STATUS);
- userRepository.save(user3);
-
- Collection allActiveUsers = userRepository.findAllActiveUsers();
-
- assertThat(allActiveUsers.size()).isEqualTo(2);
- }
-
- @Test
- public void givenUsersInDB_WhenFindAllWithQueryAnnotationNative_ThenReturnCollectionWithActiveUsers() {
- User user1 = new User();
- user1.setName(USER_NAME_ADAM);
- user1.setEmail(USER_EMAIL);
- user1.setStatus(ACTIVE_STATUS);
- userRepository.save(user1);
-
- User user2 = new User();
- user2.setName(USER_NAME_ADAM);
- user2.setEmail(USER_EMAIL2);
- user2.setStatus(ACTIVE_STATUS);
- userRepository.save(user2);
-
- User user3 = new User();
- user3.setName(USER_NAME_ADAM);
- user3.setEmail(USER_EMAIL3);
- user3.setStatus(INACTIVE_STATUS);
- userRepository.save(user3);
-
- Collection allActiveUsers = userRepository.findAllActiveUsersNative();
-
- assertThat(allActiveUsers.size()).isEqualTo(2);
- }
-
- @Test
- public void givenUserInDB_WhenFindUserByStatusWithQueryAnnotation_ThenReturnActiveUser() {
- User user = new User();
- user.setName(USER_NAME_ADAM);
- user.setEmail(USER_EMAIL);
- user.setStatus(ACTIVE_STATUS);
- userRepository.save(user);
-
- User userByStatus = userRepository.findUserByStatus(ACTIVE_STATUS);
-
- assertThat(userByStatus.getName()).isEqualTo(USER_NAME_ADAM);
- }
-
- @Test
- public void givenUserInDB_WhenFindUserByStatusWithQueryAnnotationNative_ThenReturnActiveUser() {
- User user = new User();
- user.setName(USER_NAME_ADAM);
- user.setEmail(USER_EMAIL);
- user.setStatus(ACTIVE_STATUS);
- userRepository.save(user);
-
- User userByStatus = userRepository.findUserByStatusNative(ACTIVE_STATUS);
-
- assertThat(userByStatus.getName()).isEqualTo(USER_NAME_ADAM);
- }
-
- @Test
- public void givenUsersInDB_WhenFindUserByStatusAndNameWithQueryAnnotationIndexedParams_ThenReturnOneUser() {
- User user = new User();
- user.setName(USER_NAME_ADAM);
- user.setEmail(USER_EMAIL);
- user.setStatus(ACTIVE_STATUS);
- userRepository.save(user);
-
- User user2 = new User();
- user2.setName(USER_NAME_PETER);
- user2.setEmail(USER_EMAIL2);
- user2.setStatus(ACTIVE_STATUS);
- userRepository.save(user2);
-
- User userByStatus = userRepository.findUserByStatusAndName(ACTIVE_STATUS, USER_NAME_ADAM);
-
- assertThat(userByStatus.getName()).isEqualTo(USER_NAME_ADAM);
- }
-
- @Test
- public void givenUsersInDB_WhenFindUserByStatusAndNameWithQueryAnnotationNamedParams_ThenReturnOneUser() {
- User user = new User();
- user.setName(USER_NAME_ADAM);
- user.setEmail(USER_EMAIL);
- user.setStatus(ACTIVE_STATUS);
- userRepository.save(user);
-
- User user2 = new User();
- user2.setName(USER_NAME_PETER);
- user2.setEmail(USER_EMAIL2);
- user2.setStatus(ACTIVE_STATUS);
- userRepository.save(user2);
-
- User userByStatus = userRepository.findUserByStatusAndNameNamedParams(ACTIVE_STATUS, USER_NAME_ADAM);
-
- assertThat(userByStatus.getName()).isEqualTo(USER_NAME_ADAM);
- }
-
- @Test
- public void givenUsersInDB_WhenFindUserByStatusAndNameWithQueryAnnotationNativeNamedParams_ThenReturnOneUser() {
- User user = new User();
- user.setName(USER_NAME_ADAM);
- user.setEmail(USER_EMAIL);
- user.setStatus(ACTIVE_STATUS);
- userRepository.save(user);
-
- User user2 = new User();
- user2.setName(USER_NAME_PETER);
- user2.setEmail(USER_EMAIL2);
- user2.setStatus(ACTIVE_STATUS);
- userRepository.save(user2);
-
- User userByStatus = userRepository.findUserByStatusAndNameNamedParamsNative(ACTIVE_STATUS, USER_NAME_ADAM);
-
- assertThat(userByStatus.getName()).isEqualTo(USER_NAME_ADAM);
- }
-
- @Test
- public void givenUsersInDB_WhenFindUserByStatusAndNameWithQueryAnnotationNamedParamsCustomNames_ThenReturnOneUser() {
- User user = new User();
- user.setName(USER_NAME_ADAM);
- user.setEmail(USER_EMAIL);
- user.setStatus(ACTIVE_STATUS);
- userRepository.save(user);
-
- User user2 = new User();
- user2.setName(USER_NAME_PETER);
- user2.setEmail(USER_EMAIL2);
- user2.setStatus(ACTIVE_STATUS);
- userRepository.save(user2);
-
- User userByStatus = userRepository.findUserByUserStatusAndUserName(ACTIVE_STATUS, USER_NAME_ADAM);
-
- assertThat(userByStatus.getName()).isEqualTo(USER_NAME_ADAM);
- }
-
- @Test
- public void givenUsersInDB_WhenFindUserByNameLikeWithQueryAnnotationIndexedParams_ThenReturnUser() {
- User user = new User();
- user.setName(USER_NAME_ADAM);
- user.setEmail(USER_EMAIL);
- user.setStatus(ACTIVE_STATUS);
- userRepository.save(user);
-
- User userByStatus = userRepository.findUserByNameLike("Ad");
-
- assertThat(userByStatus.getName()).isEqualTo(USER_NAME_ADAM);
- }
-
- @Test
- public void givenUsersInDB_WhenFindUserByNameLikeWithQueryAnnotationNamedParams_ThenReturnUser() {
- User user = new User();
- user.setName(USER_NAME_ADAM);
- user.setEmail(USER_EMAIL);
- user.setStatus(ACTIVE_STATUS);
- userRepository.save(user);
-
- User userByStatus = userRepository.findUserByNameLikeNamedParam("Ad");
-
- assertThat(userByStatus.getName()).isEqualTo(USER_NAME_ADAM);
- }
-
- @Test
- public void givenUsersInDB_WhenFindUserByNameLikeWithQueryAnnotationNative_ThenReturnUser() {
- User user = new User();
- user.setName(USER_NAME_ADAM);
- user.setEmail(USER_EMAIL);
- user.setStatus(ACTIVE_STATUS);
- userRepository.save(user);
-
- User userByStatus = userRepository.findUserByNameLikeNative("Ad");
-
- assertThat(userByStatus.getName()).isEqualTo(USER_NAME_ADAM);
- }
-
- @Test
- public void givenUsersInDB_WhenFindAllWithSortByName_ThenReturnUsersSorted() {
- userRepository.save(new User(USER_NAME_ADAM, LocalDate.now(), USER_EMAIL, ACTIVE_STATUS));
- userRepository.save(new User(USER_NAME_PETER, LocalDate.now(), USER_EMAIL2, ACTIVE_STATUS));
- userRepository.save(new User("SAMPLE", LocalDate.now(), USER_EMAIL3, INACTIVE_STATUS));
-
- List usersSortByName = userRepository.findAll(Sort.by(Sort.Direction.ASC, "name"));
-
- assertThat(usersSortByName.get(0)
- .getName()).isEqualTo(USER_NAME_ADAM);
- }
-
- @Test(expected = PropertyReferenceException.class)
- public void givenUsersInDB_WhenFindAllSortWithFunction_ThenThrowException() {
- userRepository.save(new User(USER_NAME_ADAM, LocalDate.now(), USER_EMAIL, ACTIVE_STATUS));
- userRepository.save(new User(USER_NAME_PETER, LocalDate.now(), USER_EMAIL2, ACTIVE_STATUS));
- userRepository.save(new User("SAMPLE", LocalDate.now(), USER_EMAIL3, INACTIVE_STATUS));
-
- userRepository.findAll(Sort.by(Sort.Direction.ASC, "name"));
-
- List usersSortByNameLength = userRepository.findAll(Sort.by("LENGTH(name)"));
-
- assertThat(usersSortByNameLength.get(0)
- .getName()).isEqualTo(USER_NAME_ADAM);
- }
-
- @Test
- public void givenUsersInDB_WhenFindAllSortWithFunctionQueryAnnotationJPQL_ThenReturnUsersSorted() {
- userRepository.save(new User(USER_NAME_ADAM, LocalDate.now(), USER_EMAIL, ACTIVE_STATUS));
- userRepository.save(new User(USER_NAME_PETER, LocalDate.now(), USER_EMAIL2, ACTIVE_STATUS));
- userRepository.save(new User("SAMPLE", LocalDate.now(), USER_EMAIL3, INACTIVE_STATUS));
-
- userRepository.findAllUsers(Sort.by("name"));
-
- List usersSortByNameLength = userRepository.findAllUsers(JpaSort.unsafe("LENGTH(name)"));
-
- assertThat(usersSortByNameLength.get(0)
- .getName()).isEqualTo(USER_NAME_ADAM);
- }
-
- @Test
- public void givenUsersInDB_WhenFindAllWithPageRequestQueryAnnotationJPQL_ThenReturnPageOfUsers() {
- userRepository.save(new User(USER_NAME_ADAM, LocalDate.now(), USER_EMAIL, ACTIVE_STATUS));
- userRepository.save(new User(USER_NAME_PETER, LocalDate.now(), USER_EMAIL2, ACTIVE_STATUS));
- userRepository.save(new User("SAMPLE", LocalDate.now(), USER_EMAIL3, INACTIVE_STATUS));
- userRepository.save(new User("SAMPLE1", LocalDate.now(), USER_EMAIL4, INACTIVE_STATUS));
- userRepository.save(new User("SAMPLE2", LocalDate.now(), USER_EMAIL5, INACTIVE_STATUS));
- userRepository.save(new User("SAMPLE3", LocalDate.now(), USER_EMAIL6, INACTIVE_STATUS));
-
- Page usersPage = userRepository.findAllUsersWithPagination(PageRequest.of(1, 3));
-
- assertThat(usersPage.getContent()
- .get(0)
- .getName()).isEqualTo("SAMPLE1");
- }
-
- @Test
- public void givenUsersInDB_WhenFindAllWithPageRequestQueryAnnotationNative_ThenReturnPageOfUsers() {
- userRepository.save(new User(USER_NAME_ADAM, LocalDate.now(), USER_EMAIL, ACTIVE_STATUS));
- userRepository.save(new User(USER_NAME_PETER, LocalDate.now(), USER_EMAIL2, ACTIVE_STATUS));
- userRepository.save(new User("SAMPLE", LocalDate.now(), USER_EMAIL3, INACTIVE_STATUS));
- userRepository.save(new User("SAMPLE1", LocalDate.now(), USER_EMAIL4, INACTIVE_STATUS));
- userRepository.save(new User("SAMPLE2", LocalDate.now(), USER_EMAIL5, INACTIVE_STATUS));
- userRepository.save(new User("SAMPLE3", LocalDate.now(), USER_EMAIL6, INACTIVE_STATUS));
-
- Page usersSortByNameLength = userRepository.findAllUsersWithPaginationNative(PageRequest.of(1, 3));
-
- assertThat(usersSortByNameLength.getContent()
- .get(0)
- .getName()).isEqualTo(USER_NAME_PETER);
- }
-
- @Test
- @Transactional
- public void givenUsersInDB_WhenUpdateStatusForNameModifyingQueryAnnotationJPQL_ThenModifyMatchingUsers() {
- userRepository.save(new User("SAMPLE", LocalDate.now(), USER_EMAIL, ACTIVE_STATUS));
- userRepository.save(new User("SAMPLE1", LocalDate.now(), USER_EMAIL2, ACTIVE_STATUS));
- userRepository.save(new User("SAMPLE", LocalDate.now(), USER_EMAIL3, ACTIVE_STATUS));
- userRepository.save(new User("SAMPLE3", LocalDate.now(), USER_EMAIL4, ACTIVE_STATUS));
-
- int updatedUsersSize = userRepository.updateUserSetStatusForName(INACTIVE_STATUS, "SAMPLE");
-
- assertThat(updatedUsersSize).isEqualTo(2);
- }
-
- @Test
- public void givenUsersInDB_WhenFindByEmailsWithDynamicQuery_ThenReturnCollection() {
-
- User user1 = new User();
- user1.setEmail(USER_EMAIL);
- userRepository.save(user1);
-
- User user2 = new User();
- user2.setEmail(USER_EMAIL2);
- userRepository.save(user2);
-
- User user3 = new User();
- user3.setEmail(USER_EMAIL3);
- userRepository.save(user3);
-
- Set emails = new HashSet<>();
- emails.add(USER_EMAIL2);
- emails.add(USER_EMAIL3);
-
- Collection usersWithEmails = userRepository.findUserByEmails(emails);
-
- assertThat(usersWithEmails.size()).isEqualTo(2);
- }
-
- @Test
- public void givenUsersInDBWhenFindByNameListReturnCollection() {
-
- User user1 = new User();
- user1.setName(USER_NAME_ADAM);
- user1.setEmail(USER_EMAIL);
- userRepository.save(user1);
-
- User user2 = new User();
- user2.setName(USER_NAME_PETER);
- user2.setEmail(USER_EMAIL2);
- userRepository.save(user2);
-
- List names = Arrays.asList(USER_NAME_ADAM, USER_NAME_PETER);
-
- List usersWithNames = userRepository.findUserByNameList(names);
-
- assertThat(usersWithNames.size()).isEqualTo(2);
- }
-
-
- @Test
- @Transactional
- public void whenInsertedWithQuery_ThenUserIsPersisted() {
- userRepository.insertUser(USER_NAME_ADAM, 1, USER_EMAIL, ACTIVE_STATUS, true);
- userRepository.insertUser(USER_NAME_PETER, 1, USER_EMAIL2, ACTIVE_STATUS, true);
-
- User userAdam = userRepository.findUserByNameLike(USER_NAME_ADAM);
- User userPeter = userRepository.findUserByNameLike(USER_NAME_PETER);
-
- assertThat(userAdam).isNotNull();
- assertThat(userAdam.getEmail()).isEqualTo(USER_EMAIL);
- assertThat(userPeter).isNotNull();
- assertThat(userPeter.getEmail()).isEqualTo(USER_EMAIL2);
- }
-
-
- @Test
- @Transactional
- public void givenTwoUsers_whenFindByNameUsr01_ThenUserUsr01() {
- User usr01 = new User("usr01", LocalDate.now(), "usr01@baeldung.com", 1);
- User usr02 = new User("usr02", LocalDate.now(), "usr02@baeldung.com", 1);
-
- userRepository.save(usr01);
- userRepository.save(usr02);
-
- try (Stream users = userRepository.findAllByName("usr01")) {
- assertTrue(users.allMatch(usr -> usr.equals(usr01)));
- }
- }
-
- @Test
- @Transactional
- public void givenTwoUsers_whenFindByNameUsr00_ThenNoUsers() {
- User usr01 = new User("usr01", LocalDate.now(), "usr01@baeldung.com", 1);
- User usr02 = new User("usr02", LocalDate.now(), "usr02@baeldung.com", 1);
-
- userRepository.save(usr01);
- userRepository.save(usr02);
-
- try (Stream users = userRepository.findAllByName("usr00")) {
- assertEquals(0, users.count());
- }
- }
-
- @Test
- public void givenTwoUsers_whenFindUsersWithGmailAddress_ThenUserUsr02() {
- User usr01 = new User("usr01", LocalDate.now(), "usr01@baeldung.com", 1);
- User usr02 = new User("usr02", LocalDate.now(), "usr02@gmail.com", 1);
-
- userRepository.save(usr01);
- userRepository.save(usr02);
-
- List users = userRepository.findUsersWithGmailAddress();
- assertEquals(1, users.size());
- assertEquals(usr02, users.get(0));
- }
-
- @Test
- @Transactional
- public void givenTwoUsers_whenDeleteAllByCreationDateAfter_ThenOneUserRemains() {
- User usr01 = new User("usr01", LocalDate.of(2018, 1, 1), "usr01@baeldung.com", 1);
- User usr02 = new User("usr02", LocalDate.of(2018, 6, 1), "usr02@baeldung.com", 1);
-
- userRepository.save(usr01);
- userRepository.save(usr02);
-
- userRepository.deleteAllByCreationDateAfter(LocalDate.of(2018, 5, 1));
-
- List users = userRepository.findAll();
-
- assertEquals(1, users.size());
- assertEquals(usr01, users.get(0));
- }
-
- @Test
- public void givenTwoUsers_whenFindAllUsersByPredicates_ThenUserUsr01() {
- User usr01 = new User("usr01", LocalDate.of(2018, 1, 1), "usr01@baeldung.com", 1);
- User usr02 = new User("usr02", LocalDate.of(2018, 6, 1), "usr02@baeldung.org", 1);
-
- userRepository.save(usr01);
- userRepository.save(usr02);
-
- List> predicates = new ArrayList<>();
- predicates.add(usr -> usr.getCreationDate().isAfter(LocalDate.of(2017, 12, 31)));
- predicates.add(usr -> usr.getEmail().endsWith(".com"));
-
- List users = userRepository.findAllUsersByPredicates(predicates);
-
- assertEquals(1, users.size());
- assertEquals(usr01, users.get(0));
- }
-
- @Test
- @Transactional
- public void givenTwoUsers_whenDeactivateUsersNotLoggedInSince_ThenUserUsr02Deactivated() {
- User usr01 = new User("usr01", LocalDate.of(2018, 1, 1), "usr01@baeldung.com", 1);
- usr01.setLastLoginDate(LocalDate.now());
- User usr02 = new User("usr02", LocalDate.of(2018, 6, 1), "usr02@baeldung.org", 1);
- usr02.setLastLoginDate(LocalDate.of(2018, 7, 20));
-
- userRepository.save(usr01);
- userRepository.save(usr02);
-
- userRepository.deactivateUsersNotLoggedInSince(LocalDate.of(2018, 8, 1));
-
- List users = userRepository.findAllUsers(Sort.by(Sort.Order.asc("name")));
- assertTrue(users.get(0).isActive());
- assertFalse(users.get(1).isActive());
- }
-
- @Test
- @Transactional
- public void givenTwoUsers_whenDeleteDeactivatedUsers_ThenUserUsr02Deleted() {
- User usr01 = new User("usr01", LocalDate.of(2018, 1, 1), "usr01@baeldung.com", 1);
- usr01.setLastLoginDate(LocalDate.now());
- User usr02 = new User("usr02", LocalDate.of(2018, 6, 1), "usr02@baeldung.com", 0);
- usr02.setLastLoginDate(LocalDate.of(2018, 7, 20));
- usr02.setActive(false);
-
- userRepository.save(usr01);
- userRepository.save(usr02);
-
- int deletedUsersCount = userRepository.deleteDeactivatedUsers();
-
- List users = userRepository.findAll();
- assertEquals(1, users.size());
- assertEquals(usr01, users.get(0));
- assertEquals(1, deletedUsersCount);
- }
-
- @Test
- @Transactional
- public void givenTwoUsers_whenAddDeletedColumn_ThenUsersHaveDeletedColumn() {
- User usr01 = new User("usr01", LocalDate.of(2018, 1, 1), "usr01@baeldung.com", 1);
- usr01.setLastLoginDate(LocalDate.now());
- User usr02 = new User("usr02", LocalDate.of(2018, 6, 1), "usr02@baeldung.org", 1);
- usr02.setLastLoginDate(LocalDate.of(2018, 7, 20));
- usr02.setActive(false);
-
- userRepository.save(usr01);
- userRepository.save(usr02);
-
- userRepository.addDeletedColumn();
-
- Query nativeQuery = entityManager.createNativeQuery("select deleted from USERS where NAME = 'usr01'");
- assertEquals(0, nativeQuery.getResultList().get(0));
- }
-
- @After
- public void cleanUp() {
- userRepository.deleteAll();
- }
-}
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/UserRepositoryTCAutoLiveTest.java b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/UserRepositoryTCAutoLiveTest.java
deleted file mode 100644
index 99eabc8271..0000000000
--- a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/UserRepositoryTCAutoLiveTest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.baeldung.boot.daos;
-
-import com.baeldung.boot.Application;
-import com.baeldung.boot.domain.User;
-import com.baeldung.util.BaeldungPostgresqlContainer;
-import org.junit.ClassRule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.ActiveProfiles;
-import org.springframework.test.context.junit4.SpringRunner;
-import org.springframework.transaction.annotation.Transactional;
-import org.testcontainers.containers.PostgreSQLContainer;
-
-import java.time.LocalDate;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-/**
- * Created by adam.
- */
-@RunWith(SpringRunner.class)
-@SpringBootTest(classes = Application.class)
-@ActiveProfiles({"tc", "tc-auto"})
-public class UserRepositoryTCAutoLiveTest extends UserRepositoryCommon {
-
- @ClassRule
- public static PostgreSQLContainer postgreSQLContainer = BaeldungPostgresqlContainer.getInstance();
-
- @Test
- @Transactional
- public void givenUsersInDB_WhenUpdateStatusForNameModifyingQueryAnnotationNativePostgres_ThenModifyMatchingUsers() {
- userRepository.save(new User("SAMPLE", LocalDate.now(), USER_EMAIL, ACTIVE_STATUS));
- userRepository.save(new User("SAMPLE1", LocalDate.now(), USER_EMAIL2, ACTIVE_STATUS));
- userRepository.save(new User("SAMPLE", LocalDate.now(), USER_EMAIL3, ACTIVE_STATUS));
- userRepository.save(new User("SAMPLE3", LocalDate.now(), USER_EMAIL4, ACTIVE_STATUS));
- userRepository.flush();
-
- int updatedUsersSize = userRepository.updateUserSetStatusForNameNativePostgres(INACTIVE_STATUS, "SAMPLE");
-
- assertThat(updatedUsersSize).isEqualTo(2);
- }
-}
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/UserRepositoryTCLiveTest.java b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/UserRepositoryTCLiveTest.java
deleted file mode 100644
index be8843c166..0000000000
--- a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/UserRepositoryTCLiveTest.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package com.baeldung.boot.daos;
-
-import com.baeldung.boot.Application;
-import com.baeldung.boot.domain.User;
-import org.junit.ClassRule;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.boot.test.util.TestPropertyValues;
-import org.springframework.context.ApplicationContextInitializer;
-import org.springframework.context.ConfigurableApplicationContext;
-import org.springframework.test.context.ActiveProfiles;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.SpringRunner;
-import org.springframework.transaction.annotation.Transactional;
-import org.testcontainers.containers.PostgreSQLContainer;
-
-import java.time.LocalDate;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-@RunWith(SpringRunner.class)
-@SpringBootTest(classes = Application.class)
-@ActiveProfiles("tc")
-@ContextConfiguration(initializers = {UserRepositoryTCLiveTest.Initializer.class})
-public class UserRepositoryTCLiveTest extends UserRepositoryCommon {
-
- @ClassRule
- public static PostgreSQLContainer postgreSQLContainer = new PostgreSQLContainer("postgres:11.1")
- .withDatabaseName("integration-tests-db")
- .withUsername("sa")
- .withPassword("sa");
-
- @Test
- @Transactional
- public void givenUsersInDB_WhenUpdateStatusForNameModifyingQueryAnnotationNative_ThenModifyMatchingUsers() {
- userRepository.save(new User("SAMPLE", LocalDate.now(), USER_EMAIL, ACTIVE_STATUS));
- userRepository.save(new User("SAMPLE1", LocalDate.now(), USER_EMAIL2, ACTIVE_STATUS));
- userRepository.save(new User("SAMPLE", LocalDate.now(), USER_EMAIL3, ACTIVE_STATUS));
- userRepository.save(new User("SAMPLE3", LocalDate.now(), USER_EMAIL4, ACTIVE_STATUS));
- userRepository.flush();
-
- int updatedUsersSize = userRepository.updateUserSetStatusForNameNativePostgres(INACTIVE_STATUS, "SAMPLE");
-
- assertThat(updatedUsersSize).isEqualTo(2);
- }
-
- static class Initializer
- implements ApplicationContextInitializer {
- public void initialize(ConfigurableApplicationContext configurableApplicationContext) {
- TestPropertyValues.of(
- "spring.datasource.url=" + postgreSQLContainer.getJdbcUrl(),
- "spring.datasource.username=" + postgreSQLContainer.getUsername(),
- "spring.datasource.password=" + postgreSQLContainer.getPassword()
- ).applyTo(configurableApplicationContext.getEnvironment());
- }
- }
-}
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/util/BaeldungPostgresqlContainer.java b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/util/BaeldungPostgresqlContainer.java
deleted file mode 100644
index e5ad2dd448..0000000000
--- a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/util/BaeldungPostgresqlContainer.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package com.baeldung.util;
-
-import org.testcontainers.containers.PostgreSQLContainer;
-
-public class BaeldungPostgresqlContainer extends PostgreSQLContainer {
-
- private static final String IMAGE_VERSION = "postgres:11.1";
-
- private static BaeldungPostgresqlContainer container;
-
-
- private BaeldungPostgresqlContainer() {
- super(IMAGE_VERSION);
- }
-
- public static BaeldungPostgresqlContainer getInstance() {
- if (container == null) {
- container = new BaeldungPostgresqlContainer();
- }
- return container;
- }
-
- @Override
- public void start() {
- super.start();
- System.setProperty("DB_URL", container.getJdbcUrl());
- System.setProperty("DB_USERNAME", container.getUsername());
- System.setProperty("DB_PASSWORD", container.getPassword());
- }
-
- @Override
- public void stop() {
- //do nothing, JVM handles shut down
- }
-}
diff --git a/persistence-modules/spring-data-jpa/src/test/resources/application-tc-auto.properties b/persistence-modules/spring-data-jpa/src/test/resources/application-tc-auto.properties
deleted file mode 100644
index c3005d861f..0000000000
--- a/persistence-modules/spring-data-jpa/src/test/resources/application-tc-auto.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-# configuration for test containers testing
-spring.datasource.url=${DB_URL}
-spring.datasource.username=${DB_USERNAME}
-spring.datasource.password=${DB_PASSWORD}
diff --git a/persistence-modules/spring-data-jpa/src/test/resources/application-tc.properties b/persistence-modules/spring-data-jpa/src/test/resources/application-tc.properties
deleted file mode 100644
index 3bf8693d53..0000000000
--- a/persistence-modules/spring-data-jpa/src/test/resources/application-tc.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-# configuration for Test Containers testing
-spring.datasource.driver-class-name=org.postgresql.Driver
-spring.jpa.hibernate.ddl-auto=create-drop
-spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false