diff --git a/persistence-modules/spring-data-jpa/pom.xml b/persistence-modules/spring-data-jpa/pom.xml
index 401f4877ac..91bcbb69b2 100644
--- a/persistence-modules/spring-data-jpa/pom.xml
+++ b/persistence-modules/spring-data-jpa/pom.xml
@@ -80,5 +80,9 @@
test
+
+
+ com.baeldung.boot.Application
+
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/Application.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/Application.java
similarity index 75%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/Application.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/Application.java
index 72d29d9fa5..1f078801e2 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/Application.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/Application.java
@@ -1,10 +1,11 @@
-package com.baeldung;
+package com.baeldung.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
-import com.baeldung.dao.repositories.impl.ExtendedRepositoryImpl;
+import com.baeldung.boot.daos.impl.ExtendedRepositoryImpl;
+import com.baeldung.multipledb.MultipleDbApplication;
@SpringBootApplication
@EnableJpaRepositories(repositoryBaseClass = ExtendedRepositoryImpl.class)
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/config/PersistenceConfiguration.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/config/PersistenceConfiguration.java
new file mode 100644
index 0000000000..64e3cd8c9a
--- /dev/null
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/config/PersistenceConfiguration.java
@@ -0,0 +1,33 @@
+package com.baeldung.boot.config;
+
+import com.baeldung.boot.daos.impl.ExtendedRepositoryImpl;
+import com.baeldung.boot.services.IBarService;
+import com.baeldung.boot.services.impl.BarSpringDataJpaService;
+import com.google.common.base.Preconditions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.*;
+import org.springframework.core.env.Environment;
+import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;
+import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
+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.JpaVendorAdapter;
+import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
+import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
+import org.springframework.transaction.PlatformTransactionManager;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+import javax.sql.DataSource;
+import java.util.Properties;
+
+@Configuration
+@Profile("!tc")
+public class PersistenceConfiguration {
+
+ @Bean
+ public IBarService barSpringDataJpaService() {
+ return new BarSpringDataJpaService();
+ }
+
+}
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/ArticleRepository.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/ArticleRepository.java
similarity index 90%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/ArticleRepository.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/ArticleRepository.java
index 8402c099d9..73397ad42e 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/ArticleRepository.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/ArticleRepository.java
@@ -1,10 +1,11 @@
-package com.baeldung.dao.repositories;
+package com.baeldung.boot.daos;
-import com.baeldung.domain.Article;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
+import com.baeldung.boot.domain.Article;
+
import java.util.Date;
import java.util.List;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/CustomItemRepository.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/CustomItemRepository.java
similarity index 74%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/CustomItemRepository.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/CustomItemRepository.java
index ba077ccf1f..207f992b33 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/CustomItemRepository.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/CustomItemRepository.java
@@ -1,8 +1,8 @@
-package com.baeldung.dao.repositories;
+package com.baeldung.boot.daos;
import org.springframework.stereotype.Repository;
-import com.baeldung.domain.Item;
+import com.baeldung.boot.domain.Item;
@Repository
public interface CustomItemRepository {
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/CustomItemTypeRepository.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/CustomItemTypeRepository.java
similarity index 71%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/CustomItemTypeRepository.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/CustomItemTypeRepository.java
index 81ebdf3fda..832d61408c 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/CustomItemTypeRepository.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/CustomItemTypeRepository.java
@@ -1,8 +1,8 @@
-package com.baeldung.dao.repositories;
+package com.baeldung.boot.daos;
import org.springframework.stereotype.Repository;
-import com.baeldung.domain.ItemType;
+import com.baeldung.boot.domain.ItemType;
@Repository
public interface CustomItemTypeRepository {
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/ExtendedRepository.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/ExtendedRepository.java
similarity index 90%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/ExtendedRepository.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/ExtendedRepository.java
index 9e82f02fa6..adb2af4320 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/ExtendedRepository.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/ExtendedRepository.java
@@ -1,4 +1,4 @@
-package com.baeldung.dao.repositories;
+package com.baeldung.boot.daos;
import java.io.Serializable;
import java.util.List;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/ExtendedStudentRepository.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/ExtendedStudentRepository.java
similarity index 54%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/ExtendedStudentRepository.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/ExtendedStudentRepository.java
index 199e4e5ff6..c9b0192536 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/ExtendedStudentRepository.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/ExtendedStudentRepository.java
@@ -1,6 +1,6 @@
-package com.baeldung.dao.repositories;
+package com.baeldung.boot.daos;
-import com.baeldung.domain.Student;
+import com.baeldung.boot.domain.Student;
public interface ExtendedStudentRepository extends ExtendedRepository {
}
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/IBarCrudRepository.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/IBarCrudRepository.java
similarity index 71%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/IBarCrudRepository.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/IBarCrudRepository.java
index 54a7d77691..921fabe3fb 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/IBarCrudRepository.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/IBarCrudRepository.java
@@ -1,8 +1,9 @@
-package com.baeldung.dao.repositories;
+package com.baeldung.boot.daos;
-import com.baeldung.domain.Bar;
import org.springframework.data.repository.CrudRepository;
+import com.baeldung.boot.domain.Bar;
+
import java.io.Serializable;
public interface IBarCrudRepository extends CrudRepository {
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/IFooDao.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/IFooDao.java
similarity index 83%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/IFooDao.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/IFooDao.java
index bb3c229945..d537772076 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/IFooDao.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/IFooDao.java
@@ -1,10 +1,11 @@
-package com.baeldung.dao;
+package com.baeldung.boot.daos;
-import com.baeldung.domain.Foo;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
+import com.baeldung.boot.domain.Foo;
+
public interface IFooDao extends JpaRepository {
@Query("SELECT f FROM Foo f WHERE LOWER(f.name) = LOWER(:name)")
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/InventoryRepository.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/InventoryRepository.java
similarity index 63%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/InventoryRepository.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/InventoryRepository.java
index a575f0b915..606f3993d5 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/InventoryRepository.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/InventoryRepository.java
@@ -1,7 +1,8 @@
-package com.baeldung.dao.repositories;
+package com.baeldung.boot.daos;
-import com.baeldung.domain.MerchandiseEntity;
import org.springframework.data.repository.CrudRepository;
+import com.baeldung.boot.domain.MerchandiseEntity;
+
public interface InventoryRepository extends CrudRepository {
}
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/ItemTypeRepository.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/ItemTypeRepository.java
similarity index 76%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/ItemTypeRepository.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/ItemTypeRepository.java
index 2af83bc322..413c09e968 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/ItemTypeRepository.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/ItemTypeRepository.java
@@ -1,9 +1,9 @@
-package com.baeldung.dao.repositories;
+package com.baeldung.boot.daos;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
-import com.baeldung.domain.ItemType;
+import com.baeldung.boot.domain.ItemType;
@Repository
public interface ItemTypeRepository extends JpaRepository, CustomItemTypeRepository, CustomItemRepository {
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/LocationRepository.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/LocationRepository.java
similarity index 72%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/LocationRepository.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/LocationRepository.java
index 27bbe27af0..697ce295d0 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/LocationRepository.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/LocationRepository.java
@@ -1,9 +1,9 @@
-package com.baeldung.dao.repositories;
+package com.baeldung.boot.daos;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
-import com.baeldung.domain.Location;
+import com.baeldung.boot.domain.Location;
@Repository
public interface LocationRepository extends JpaRepository {
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/ReadOnlyLocationRepository.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/ReadOnlyLocationRepository.java
similarity index 79%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/ReadOnlyLocationRepository.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/ReadOnlyLocationRepository.java
index 8f68cdbbe5..3a2ea3cda5 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/ReadOnlyLocationRepository.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/ReadOnlyLocationRepository.java
@@ -1,10 +1,10 @@
-package com.baeldung.dao.repositories;
+package com.baeldung.boot.daos;
import java.util.Optional;
import org.springframework.data.repository.Repository;
-import com.baeldung.domain.Location;
+import com.baeldung.boot.domain.Location;
@org.springframework.stereotype.Repository
public interface ReadOnlyLocationRepository extends Repository {
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/StoreRepository.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/StoreRepository.java
similarity index 79%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/StoreRepository.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/StoreRepository.java
index 9318c32ee9..ae13f75f66 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/StoreRepository.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/StoreRepository.java
@@ -1,11 +1,11 @@
-package com.baeldung.dao.repositories;
+package com.baeldung.boot.daos;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
-import com.baeldung.domain.Store;
+import com.baeldung.boot.domain.Store;
@Repository
public interface StoreRepository extends JpaRepository {
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/impl/CustomItemRepositoryImpl.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/impl/CustomItemRepositoryImpl.java
similarity index 83%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/impl/CustomItemRepositoryImpl.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/impl/CustomItemRepositoryImpl.java
index 53def88af0..7c681eb49f 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/impl/CustomItemRepositoryImpl.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/impl/CustomItemRepositoryImpl.java
@@ -1,12 +1,12 @@
-package com.baeldung.dao.repositories.impl;
+package com.baeldung.boot.daos.impl;
import javax.persistence.EntityManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
-import com.baeldung.domain.Item;
-import com.baeldung.dao.repositories.CustomItemRepository;
+import com.baeldung.boot.daos.CustomItemRepository;
+import com.baeldung.boot.domain.Item;
@Repository
public class CustomItemRepositoryImpl implements CustomItemRepository {
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/impl/CustomItemTypeRepositoryImpl.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/impl/CustomItemTypeRepositoryImpl.java
similarity index 84%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/impl/CustomItemTypeRepositoryImpl.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/impl/CustomItemTypeRepositoryImpl.java
index 2b49f2380c..d7cba7c2c6 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/impl/CustomItemTypeRepositoryImpl.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/impl/CustomItemTypeRepositoryImpl.java
@@ -1,4 +1,4 @@
-package com.baeldung.dao.repositories.impl;
+package com.baeldung.boot.daos.impl;
import javax.persistence.EntityManager;
@@ -7,8 +7,8 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
-import com.baeldung.domain.ItemType;
-import com.baeldung.dao.repositories.CustomItemTypeRepository;
+import com.baeldung.boot.daos.CustomItemTypeRepository;
+import com.baeldung.boot.domain.ItemType;
@Repository
public class CustomItemTypeRepositoryImpl implements CustomItemTypeRepository {
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/impl/ExtendedRepositoryImpl.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/impl/ExtendedRepositoryImpl.java
similarity index 93%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/impl/ExtendedRepositoryImpl.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/impl/ExtendedRepositoryImpl.java
index f6f06efb51..fbe6695844 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/impl/ExtendedRepositoryImpl.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/impl/ExtendedRepositoryImpl.java
@@ -1,4 +1,4 @@
-package com.baeldung.dao.repositories.impl;
+package com.baeldung.boot.daos.impl;
import java.io.Serializable;
import java.util.List;
@@ -10,10 +10,11 @@ import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import javax.transaction.Transactional;
-import com.baeldung.dao.repositories.ExtendedRepository;
import org.springframework.data.jpa.repository.support.JpaEntityInformation;
import org.springframework.data.jpa.repository.support.SimpleJpaRepository;
+import com.baeldung.boot.daos.ExtendedRepository;
+
public class ExtendedRepositoryImpl extends SimpleJpaRepository implements ExtendedRepository {
private EntityManager entityManager;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/impl/PersonInsertRepository.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/impl/PersonInsertRepository.java
similarity index 90%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/impl/PersonInsertRepository.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/impl/PersonInsertRepository.java
index d809385456..373532e1c3 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/impl/PersonInsertRepository.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/daos/impl/PersonInsertRepository.java
@@ -1,8 +1,9 @@
-package com.baeldung.dao.repositories.impl;
+package com.baeldung.boot.daos.impl;
-import com.baeldung.domain.Person;
import org.springframework.stereotype.Repository;
+import com.baeldung.boot.domain.Person;
+
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.transaction.Transactional;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/ddd/event/Aggregate.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/Aggregate.java
similarity index 95%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/ddd/event/Aggregate.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/Aggregate.java
index bf6ff0a0b9..e435f4c85c 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/ddd/event/Aggregate.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/Aggregate.java
@@ -1,7 +1,7 @@
/**
*
*/
-package com.baeldung.ddd.event;
+package com.baeldung.boot.ddd.event;
import javax.persistence.Entity;
import javax.persistence.Id;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/ddd/event/Aggregate2.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/Aggregate2.java
similarity index 95%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/ddd/event/Aggregate2.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/Aggregate2.java
index 3d2816299a..08f61db812 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/ddd/event/Aggregate2.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/Aggregate2.java
@@ -1,7 +1,7 @@
/**
*
*/
-package com.baeldung.ddd.event;
+package com.baeldung.boot.ddd.event;
import java.util.ArrayList;
import java.util.Collection;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/ddd/event/Aggregate2Repository.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/Aggregate2Repository.java
similarity index 80%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/ddd/event/Aggregate2Repository.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/Aggregate2Repository.java
index 2a95abe347..7f09c410fc 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/ddd/event/Aggregate2Repository.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/Aggregate2Repository.java
@@ -1,7 +1,7 @@
/**
*
*/
-package com.baeldung.ddd.event;
+package com.baeldung.boot.ddd.event;
import org.springframework.data.repository.CrudRepository;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/ddd/event/Aggregate3.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/Aggregate3.java
similarity index 91%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/ddd/event/Aggregate3.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/Aggregate3.java
index e0c3131b06..f664322a59 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/ddd/event/Aggregate3.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/Aggregate3.java
@@ -1,7 +1,7 @@
/**
*
*/
-package com.baeldung.ddd.event;
+package com.baeldung.boot.ddd.event;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/ddd/event/Aggregate3Repository.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/Aggregate3Repository.java
similarity index 83%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/ddd/event/Aggregate3Repository.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/Aggregate3Repository.java
index e442bdb210..93f50bb5cf 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/ddd/event/Aggregate3Repository.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/Aggregate3Repository.java
@@ -1,7 +1,7 @@
/**
*
*/
-package com.baeldung.ddd.event;
+package com.baeldung.boot.ddd.event;
import org.springframework.data.repository.CrudRepository;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/ddd/event/AggregateRepository.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/AggregateRepository.java
similarity index 80%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/ddd/event/AggregateRepository.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/AggregateRepository.java
index 5a15156d03..1c2d3884bf 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/ddd/event/AggregateRepository.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/AggregateRepository.java
@@ -1,7 +1,7 @@
/**
*
*/
-package com.baeldung.ddd.event;
+package com.baeldung.boot.ddd.event;
import org.springframework.data.repository.CrudRepository;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/ddd/event/DddConfig.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/DddConfig.java
similarity index 89%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/ddd/event/DddConfig.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/DddConfig.java
index 1315b11875..34cf21463b 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/ddd/event/DddConfig.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/DddConfig.java
@@ -1,7 +1,7 @@
/**
*
*/
-package com.baeldung.ddd.event;
+package com.baeldung.boot.ddd.event;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/DomainEvent.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/DomainEvent.java
new file mode 100644
index 0000000000..e7626e742d
--- /dev/null
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/DomainEvent.java
@@ -0,0 +1,8 @@
+/**
+ *
+ */
+package com.baeldung.boot.ddd.event;
+
+class DomainEvent {
+
+}
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/ddd/event/DomainService.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/DomainService.java
similarity index 95%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/ddd/event/DomainService.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/DomainService.java
index 082c9bd88e..80aa5ca6cb 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/ddd/event/DomainService.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/ddd/event/DomainService.java
@@ -1,7 +1,7 @@
/**
*
*/
-package com.baeldung.ddd.event;
+package com.baeldung.boot.ddd.event;
import javax.transaction.Transactional;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/Article.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Article.java
similarity index 92%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/Article.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Article.java
index 3b5a8be088..de4dbed1a0 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/Article.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Article.java
@@ -1,4 +1,4 @@
-package com.baeldung.domain;
+package com.baeldung.boot.domain;
import javax.persistence.*;
import java.util.Date;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/Bar.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Bar.java
similarity index 99%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/Bar.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Bar.java
index efd297bafc..35d1903801 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/Bar.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Bar.java
@@ -1,4 +1,4 @@
-package com.baeldung.domain;
+package com.baeldung.boot.domain;
import com.google.common.collect.Sets;
import org.hibernate.annotations.OrderBy;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/Foo.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Foo.java
similarity index 98%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/Foo.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Foo.java
index ef88840746..5030e5600b 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/Foo.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Foo.java
@@ -1,4 +1,4 @@
-package com.baeldung.domain;
+package com.baeldung.boot.domain;
import org.hibernate.envers.Audited;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/Item.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Item.java
similarity index 97%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/Item.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Item.java
index 1e58fb25ba..8ac06af15a 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/Item.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Item.java
@@ -1,4 +1,4 @@
-package com.baeldung.domain;
+package com.baeldung.boot.domain;
import java.math.BigDecimal;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/ItemType.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/ItemType.java
similarity index 96%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/ItemType.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/ItemType.java
index b0349e0471..8a52a9847c 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/ItemType.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/ItemType.java
@@ -1,4 +1,4 @@
-package com.baeldung.domain;
+package com.baeldung.boot.domain;
import java.util.ArrayList;
import java.util.List;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/KVTag.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/KVTag.java
similarity index 94%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/KVTag.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/KVTag.java
index b3e7d78b30..1901f43c0a 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/KVTag.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/KVTag.java
@@ -1,4 +1,4 @@
-package com.baeldung.domain;
+package com.baeldung.boot.domain;
import javax.persistence.Embeddable;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/Location.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Location.java
similarity index 96%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/Location.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Location.java
index 4ca7295986..9c1b93d551 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/Location.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Location.java
@@ -1,4 +1,4 @@
-package com.baeldung.domain;
+package com.baeldung.boot.domain;
import java.util.ArrayList;
import java.util.List;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/MerchandiseEntity.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/MerchandiseEntity.java
similarity index 97%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/MerchandiseEntity.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/MerchandiseEntity.java
index bfc690e0e2..e94c23de86 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/MerchandiseEntity.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/MerchandiseEntity.java
@@ -1,4 +1,4 @@
-package com.baeldung.domain;
+package com.baeldung.boot.domain;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/Person.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Person.java
similarity index 95%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/Person.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Person.java
index 30d7370982..88894ccc72 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/Person.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Person.java
@@ -1,4 +1,4 @@
-package com.baeldung.domain;
+package com.baeldung.boot.domain;
import javax.persistence.Entity;
import javax.persistence.Id;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/user/Possession.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Possession.java
similarity index 98%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/user/Possession.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Possession.java
index b1427c0270..44cdce86c0 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/user/Possession.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Possession.java
@@ -1,4 +1,4 @@
-package com.baeldung.domain.user;
+package com.baeldung.boot.domain;
import javax.persistence.*;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/SkillTag.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/SkillTag.java
similarity index 93%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/SkillTag.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/SkillTag.java
index 1f2778c589..0933a3e6af 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/SkillTag.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/SkillTag.java
@@ -1,4 +1,4 @@
-package com.baeldung.domain;
+package com.baeldung.boot.domain;
import javax.persistence.Embeddable;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/Store.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Store.java
similarity index 97%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/Store.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Store.java
index 4172051c71..5b4b831cc7 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/Store.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Store.java
@@ -1,4 +1,4 @@
-package com.baeldung.domain;
+package com.baeldung.boot.domain;
import java.util.ArrayList;
import java.util.List;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/Student.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Student.java
similarity index 97%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/Student.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Student.java
index bd7eaeb24b..1003167cc7 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/Student.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/Student.java
@@ -1,4 +1,4 @@
-package com.baeldung.domain;
+package com.baeldung.boot.domain;
import javax.persistence.ElementCollection;
import javax.persistence.Entity;
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
new file mode 100644
index 0000000000..5c709307ac
--- /dev/null
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/domain/User.java
@@ -0,0 +1,86 @@
+package com.baeldung.boot.domain;
+
+import javax.persistence.*;
+import java.util.List;
+
+@Entity
+@Table(name = "users")
+public class User {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private int id;
+ private String name;
+ private int age;
+ @Column(unique = true, nullable = false)
+ private String email;
+ private Integer status;
+ @OneToMany
+ List possessionList;
+
+ public User() {
+ super();
+ }
+
+ public User(String name, String email, Integer status) {
+ this.name = name;
+ this.email = email;
+ this.status = status;
+ }
+
+ 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 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();
+ }
+
+}
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/passenger/CustomPassengerRepository.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/passenger/CustomPassengerRepository.java
similarity index 77%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/passenger/CustomPassengerRepository.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/passenger/CustomPassengerRepository.java
index 7ae44bfbda..7152286c83 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/passenger/CustomPassengerRepository.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/passenger/CustomPassengerRepository.java
@@ -1,4 +1,4 @@
-package com.baeldung.passenger;
+package com.baeldung.boot.passenger;
import java.util.List;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/passenger/Passenger.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/passenger/Passenger.java
similarity index 98%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/passenger/Passenger.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/passenger/Passenger.java
index a96b1edb20..c75107a783 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/passenger/Passenger.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/passenger/Passenger.java
@@ -1,4 +1,4 @@
-package com.baeldung.passenger;
+package com.baeldung.boot.passenger;
import javax.persistence.Basic;
import javax.persistence.Column;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/passenger/PassengerRepository.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/passenger/PassengerRepository.java
similarity index 92%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/passenger/PassengerRepository.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/passenger/PassengerRepository.java
index 6ae6afb403..107ea838ed 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/passenger/PassengerRepository.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/passenger/PassengerRepository.java
@@ -1,4 +1,4 @@
-package com.baeldung.passenger;
+package com.baeldung.boot.passenger;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/passenger/PassengerRepositoryImpl.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/passenger/PassengerRepositoryImpl.java
similarity index 93%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/passenger/PassengerRepositoryImpl.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/passenger/PassengerRepositoryImpl.java
index bd6e535e3e..508c669066 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/passenger/PassengerRepositoryImpl.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/passenger/PassengerRepositoryImpl.java
@@ -1,4 +1,4 @@
-package com.baeldung.passenger;
+package com.baeldung.boot.passenger;
import org.springframework.stereotype.Repository;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/IBarService.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/IBarService.java
new file mode 100644
index 0000000000..8054cbba59
--- /dev/null
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/IBarService.java
@@ -0,0 +1,7 @@
+package com.baeldung.boot.services;
+
+import com.baeldung.boot.domain.Bar;
+
+public interface IBarService extends IOperations {
+ //
+}
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/services/IFooService.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/IFooService.java
similarity index 76%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/services/IFooService.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/IFooService.java
index 7e16ace5b6..871cccdd45 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/services/IFooService.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/IFooService.java
@@ -1,9 +1,10 @@
-package com.baeldung.services;
+package com.baeldung.boot.services;
-import com.baeldung.domain.Foo;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
+import com.baeldung.boot.domain.Foo;
+
public interface IFooService extends IOperations {
Foo retrieveByName(String name);
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/services/IOperations.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/IOperations.java
similarity index 92%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/services/IOperations.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/IOperations.java
index d50d465639..ec2b866b6f 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/services/IOperations.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/IOperations.java
@@ -1,4 +1,4 @@
-package com.baeldung.services;
+package com.baeldung.boot.services;
import org.springframework.data.domain.Page;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/services/impl/AbstractService.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/impl/AbstractService.java
similarity index 94%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/services/impl/AbstractService.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/impl/AbstractService.java
index 708524225b..8e4f643adc 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/services/impl/AbstractService.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/impl/AbstractService.java
@@ -1,6 +1,6 @@
-package com.baeldung.services.impl;
+package com.baeldung.boot.services.impl;
-import com.baeldung.services.IOperations;
+import com.baeldung.boot.services.IOperations;
import com.google.common.collect.Lists;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/services/impl/AbstractSpringDataJpaService.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/impl/AbstractSpringDataJpaService.java
similarity index 92%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/services/impl/AbstractSpringDataJpaService.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/impl/AbstractSpringDataJpaService.java
index 28c86bee28..a73a6bd7fc 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/services/impl/AbstractSpringDataJpaService.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/impl/AbstractSpringDataJpaService.java
@@ -1,6 +1,6 @@
-package com.baeldung.services.impl;
+package com.baeldung.boot.services.impl;
-import com.baeldung.services.IOperations;
+import com.baeldung.boot.services.IOperations;
import com.google.common.collect.Lists;
import org.springframework.data.repository.CrudRepository;
import org.springframework.transaction.annotation.Transactional;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/services/impl/BarSpringDataJpaService.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/impl/BarSpringDataJpaService.java
similarity index 79%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/services/impl/BarSpringDataJpaService.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/impl/BarSpringDataJpaService.java
index ca3e5f868d..80568f2fd4 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/services/impl/BarSpringDataJpaService.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/impl/BarSpringDataJpaService.java
@@ -1,8 +1,9 @@
-package com.baeldung.services.impl;
+package com.baeldung.boot.services.impl;
+
+import com.baeldung.boot.daos.IBarCrudRepository;
+import com.baeldung.boot.domain.Bar;
+import com.baeldung.boot.services.IBarService;
-import com.baeldung.domain.Bar;
-import com.baeldung.dao.repositories.IBarCrudRepository;
-import com.baeldung.services.IBarService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.repository.CrudRepository;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/services/impl/FooService.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/impl/FooService.java
similarity index 87%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/services/impl/FooService.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/impl/FooService.java
index 319ab3a825..04eec63854 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/services/impl/FooService.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/services/impl/FooService.java
@@ -1,9 +1,10 @@
-package com.baeldung.services.impl;
+package com.baeldung.boot.services.impl;
import com.google.common.collect.Lists;
-import com.baeldung.dao.IFooDao;
-import com.baeldung.domain.Foo;
-import com.baeldung.services.IFooService;
+import com.baeldung.boot.daos.IFooDao;
+import com.baeldung.boot.domain.Foo;
+import com.baeldung.boot.services.IFooService;
+
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/user/PossessionRepository.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/user/PossessionRepository.java
similarity index 62%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/user/PossessionRepository.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/user/PossessionRepository.java
index f0eeb475c1..63af5ca05d 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/user/PossessionRepository.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/user/PossessionRepository.java
@@ -1,8 +1,9 @@
-package com.baeldung.dao.repositories.user;
+package com.baeldung.boot.user;
-import com.baeldung.domain.user.Possession;
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/user/UserRepository.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/user/UserRepository.java
new file mode 100644
index 0000000000..1097387e7b
--- /dev/null
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/user/UserRepository.java
@@ -0,0 +1,81 @@
+package com.baeldung.boot.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.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(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) VALUES (:name, :age, :email, :status)", nativeQuery = true)
+ @Modifying
+ void insertUser(@Param("name") String name, @Param("age") Integer age, @Param("status") Integer status, @Param("email") String email);
+
+ @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);
+}
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/user/UserRepositoryCustom.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/user/UserRepositoryCustom.java
new file mode 100644
index 0000000000..7690463093
--- /dev/null
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/user/UserRepositoryCustom.java
@@ -0,0 +1,10 @@
+package com.baeldung.boot.user;
+
+import java.util.List;
+import java.util.Set;
+
+import com.baeldung.boot.domain.User;
+
+public interface UserRepositoryCustom {
+ List findUserByEmails(Set emails);
+}
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/user/UserRepositoryCustomImpl.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/user/UserRepositoryCustomImpl.java
new file mode 100644
index 0000000000..8739a1a868
--- /dev/null
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/boot/user/UserRepositoryCustomImpl.java
@@ -0,0 +1,43 @@
+package com.baeldung.boot.user;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+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();
+ }
+
+}
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/config/PersistenceConfiguration.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/config/PersistenceConfiguration.java
deleted file mode 100644
index 891624443b..0000000000
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/config/PersistenceConfiguration.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package com.baeldung.config;
-
-import com.baeldung.dao.repositories.impl.ExtendedRepositoryImpl;
-import com.baeldung.services.IBarService;
-import com.baeldung.services.impl.BarSpringDataJpaService;
-import com.google.common.base.Preconditions;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.*;
-import org.springframework.core.env.Environment;
-import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;
-import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
-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.JpaVendorAdapter;
-import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
-import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
-import org.springframework.transaction.PlatformTransactionManager;
-import org.springframework.transaction.annotation.EnableTransactionManagement;
-
-import javax.sql.DataSource;
-import java.util.Properties;
-
-@Configuration
-@ComponentScan({ "com.baeldung.dao", "com.baeldung.services" })
-@EnableTransactionManagement
-@EnableJpaRepositories(basePackages = { "com.baeldung.dao" }, repositoryBaseClass = ExtendedRepositoryImpl.class)
-@EnableJpaAuditing
-@PropertySource("classpath:persistence.properties")
-@Profile("!tc")
-public class PersistenceConfiguration {
-
- @Autowired
- private Environment env;
-
- public PersistenceConfiguration() {
- super();
- }
-
- @Bean
- public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
- final LocalContainerEntityManagerFactoryBean emf = new LocalContainerEntityManagerFactoryBean();
- emf.setDataSource(dataSource());
- emf.setPackagesToScan("com.baeldung.domain");
-
- final JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
- emf.setJpaVendorAdapter(vendorAdapter);
- emf.setJpaProperties(hibernateProperties());
-
- return emf;
- }
-
- @Bean
- public DataSource dataSource() {
- final DriverManagerDataSource dataSource = new DriverManagerDataSource();
- dataSource.setDriverClassName(Preconditions.checkNotNull(env.getProperty("jdbc.driverClassName")));
- dataSource.setUrl(Preconditions.checkNotNull(env.getProperty("jdbc.url")));
- dataSource.setUsername(Preconditions.checkNotNull(env.getProperty("jdbc.user")));
- dataSource.setPassword(Preconditions.checkNotNull(env.getProperty("jdbc.pass")));
-
- return dataSource;
- }
-
- @Bean
- public PlatformTransactionManager transactionManager() {
- final JpaTransactionManager transactionManager = new JpaTransactionManager();
- transactionManager.setEntityManagerFactory(entityManagerFactory().getObject());
- return transactionManager;
- }
-
- @Bean
- public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
- return new PersistenceExceptionTranslationPostProcessor();
- }
-
- @Bean
- public IBarService barSpringDataJpaService() {
- return new BarSpringDataJpaService();
- }
-
- private final Properties hibernateProperties() {
- 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", "true");
- // hibernateProperties.setProperty("hibernate.format_sql", "true");
- // hibernateProperties.setProperty("hibernate.globally_quoted_identifiers", "true");
-
- // Envers properties
- hibernateProperties.setProperty("org.hibernate.envers.audit_table_suffix",
- env.getProperty("envers.audit_table_suffix"));
-
- return hibernateProperties;
- }
-
-}
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/ddd/event/DomainEvent.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/ddd/event/DomainEvent.java
deleted file mode 100644
index 1e6479d4fc..0000000000
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/ddd/event/DomainEvent.java
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- *
- */
-package com.baeldung.ddd.event;
-
-class DomainEvent {
-
-}
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/MultipleDbApplication.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/MultipleDbApplication.java
new file mode 100644
index 0000000000..8ff6799e31
--- /dev/null
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/MultipleDbApplication.java
@@ -0,0 +1,14 @@
+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);
+ }
+
+}
+
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/config/PersistenceProductConfiguration.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/PersistenceProductConfiguration.java
similarity index 90%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/config/PersistenceProductConfiguration.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/PersistenceProductConfiguration.java
index ecaee82ae5..d79e721e31 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/config/PersistenceProductConfiguration.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/PersistenceProductConfiguration.java
@@ -1,4 +1,4 @@
-package com.baeldung.config;
+package com.baeldung.multipledb;
import com.google.common.base.Preconditions;
import org.springframework.beans.factory.annotation.Autowired;
@@ -17,9 +17,9 @@ import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
import java.util.HashMap;
-@Configuration
+//@Configuration
@PropertySource({"classpath:persistence-multiple-db.properties"})
-@EnableJpaRepositories(basePackages = "com.baeldung.dao.repositories.product", entityManagerFactoryRef = "productEntityManager", transactionManagerRef = "productTransactionManager")
+@EnableJpaRepositories(basePackages = "com.baeldung.multipledb", entityManagerFactoryRef = "productEntityManager", transactionManagerRef = "productTransactionManager")
@Profile("!tc")
public class PersistenceProductConfiguration {
@Autowired
@@ -35,7 +35,7 @@ public class PersistenceProductConfiguration {
public LocalContainerEntityManagerFactoryBean productEntityManager() {
final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(productDataSource());
- em.setPackagesToScan("com.baeldung.domain.product");
+ em.setPackagesToScan("com.baeldung.multipledb");
final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/config/PersistenceUserConfiguration.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/PersistenceUserConfiguration.java
similarity index 90%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/config/PersistenceUserConfiguration.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/PersistenceUserConfiguration.java
index 6893d889e6..572065314d 100644
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/config/PersistenceUserConfiguration.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/PersistenceUserConfiguration.java
@@ -1,4 +1,4 @@
-package com.baeldung.config;
+package com.baeldung.multipledb;
import com.google.common.base.Preconditions;
import org.springframework.beans.factory.annotation.Autowired;
@@ -14,9 +14,9 @@ import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
import java.util.HashMap;
-@Configuration
+//@Configuration
@PropertySource({"classpath:persistence-multiple-db.properties"})
-@EnableJpaRepositories(basePackages = "com.baeldung.dao.repositories.user", entityManagerFactoryRef = "userEntityManager", transactionManagerRef = "userTransactionManager")
+@EnableJpaRepositories(basePackages = "com.baeldung.multipledb", entityManagerFactoryRef = "userEntityManager", transactionManagerRef = "userTransactionManager")
@Profile("!tc")
public class PersistenceUserConfiguration {
@Autowired
@@ -33,7 +33,7 @@ public class PersistenceUserConfiguration {
public LocalContainerEntityManagerFactoryBean userEntityManager() {
final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(userDataSource());
- em.setPackagesToScan("com.baeldung.domain.user");
+ em.setPackagesToScan("com.baeldung.multipledb");
final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/Possession.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/Possession.java
new file mode 100644
index 0000000000..0281184dec
--- /dev/null
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/Possession.java
@@ -0,0 +1,82 @@
+package com.baeldung.multipledb;
+
+import javax.persistence.*;
+
+@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/multipledb/PossessionRepository.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/PossessionRepository.java
new file mode 100644
index 0000000000..104a0ca6b5
--- /dev/null
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/PossessionRepository.java
@@ -0,0 +1,9 @@
+package com.baeldung.multipledb;
+
+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/domain/product/Product.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/Product.java
similarity index 97%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/product/Product.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/Product.java
index 2f82e3e318..1edbd924a3 100755
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/domain/product/Product.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/Product.java
@@ -1,4 +1,4 @@
-package com.baeldung.domain.product;
+package com.baeldung.multipledb;
import javax.persistence.Entity;
import javax.persistence.Id;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/product/ProductRepository.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/ProductRepository.java
similarity index 76%
rename from persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/product/ProductRepository.java
rename to persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/ProductRepository.java
index 1f9f5f9195..b82b0989de 100755
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/dao/repositories/product/ProductRepository.java
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/ProductRepository.java
@@ -1,6 +1,4 @@
-package com.baeldung.dao.repositories.product;
-
-import com.baeldung.domain.product.Product;
+package com.baeldung.multipledb;
import java.util.List;
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/User.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/User.java
new file mode 100644
index 0000000000..e173794d74
--- /dev/null
+++ b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/multipledb/User.java
@@ -0,0 +1,76 @@
+package com.baeldung.multipledb;
+
+import javax.persistence.*;
+import java.util.List;
+
+@Entity
+@Table(name = "users")
+public class User {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private int id;
+ private String name;
+ private int age;
+ @Column(unique = true, nullable = false)
+ private String email;
+ private Integer status;
+
+ public User() {
+ super();
+ }
+
+ public User(String name, String email, Integer status) {
+ this.name = name;
+ this.email = email;
+ this.status = status;
+ }
+
+ 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;
+ }
+
+ @Override
+ public String toString() {
+ final StringBuilder builder = new StringBuilder();
+ builder.append("User [name=").append(name).append(", id=").append(id).append("]");
+ return builder.toString();
+ }
+
+}
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/services/IBarService.java b/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/services/IBarService.java
deleted file mode 100644
index 7e127488db..0000000000
--- a/persistence-modules/spring-data-jpa/src/main/java/com/baeldung/services/IBarService.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.baeldung.services;
-
-import com.baeldung.domain.Bar;
-
-public interface IBarService extends IOperations {
- //
-}
diff --git a/persistence-modules/spring-data-jpa/src/main/resources/application.properties b/persistence-modules/spring-data-jpa/src/main/resources/application.properties
index 37fb9ca9c4..9ea2ad8970 100644
--- a/persistence-modules/spring-data-jpa/src/main/resources/application.properties
+++ b/persistence-modules/spring-data-jpa/src/main/resources/application.properties
@@ -1,17 +1,9 @@
-# spring.datasource.x
-spring.datasource.driver-class-name=org.h2.Driver
-spring.datasource.url=jdbc:h2:mem:db;DB_CLOSE_DELAY=-1
-spring.datasource.username=sa
-spring.datasource.password=sa
+#spring.datasource.data=import_entities.sql
+#spring.jpa.properties.hibernate.hbm2ddl.import_files=import_entities.sql
-# hibernate.X
-hibernate.dialect=org.hibernate.dialect.H2Dialect
-hibernate.show_sql=true
-hibernate.hbm2ddl.auto=create-drop
-hibernate.cache.use_second_level_cache=true
-hibernate.cache.use_query_cache=true
-hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.EhCacheRegionFactory
+spring.main.allow-bean-definition-overriding=true
-spring.datasource.data=import_entities.sql
-spring.main.allow-bean-definition-overriding=true
\ No newline at end of file
+# envers.X
+#spring.jpa.properties.hibernate.hbm2ddl.import_files=import_entities.sql
+spring.datasource.data=classpath:import_entities.sql
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa/src/main/resources/persistence.properties b/persistence-modules/spring-data-jpa/src/main/resources/persistence.properties
index 3543e1b52b..6bc83edf34 100644
--- a/persistence-modules/spring-data-jpa/src/main/resources/persistence.properties
+++ b/persistence-modules/spring-data-jpa/src/main/resources/persistence.properties
@@ -12,5 +12,3 @@ hibernate.cache.use_second_level_cache=true
hibernate.cache.use_query_cache=true
hibernate.cache.region.factory_class=org.hibernate.cache.ehcache.EhCacheRegionFactory
-# envers.X
-envers.audit_table_suffix=_audit_log
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/dao/repositories/ArticleRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/ArticleRepositoryIntegrationTest.java
similarity index 82%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/dao/repositories/ArticleRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/ArticleRepositoryIntegrationTest.java
index 093e744003..dfb04b3dfb 100644
--- a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/dao/repositories/ArticleRepositoryIntegrationTest.java
+++ b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/ArticleRepositoryIntegrationTest.java
@@ -1,13 +1,16 @@
-package com.baeldung.dao.repositories;
+package com.baeldung.boot.daos;
+
+import com.baeldung.boot.Application;
+import com.baeldung.boot.config.PersistenceConfiguration;
+import com.baeldung.boot.daos.ArticleRepository;
+import com.baeldung.boot.domain.Article;
-import com.baeldung.config.PersistenceConfiguration;
-import com.baeldung.config.PersistenceProductConfiguration;
-import com.baeldung.config.PersistenceUserConfiguration;
-import com.baeldung.domain.Article;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.Import;
import org.springframework.test.context.junit4.SpringRunner;
import java.text.SimpleDateFormat;
@@ -18,7 +21,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@RunWith(SpringRunner.class)
-@DataJpaTest(excludeAutoConfiguration = {PersistenceConfiguration.class, PersistenceUserConfiguration.class, PersistenceProductConfiguration.class})
+@DataJpaTest(properties="spring.datasource.data=classpath:import_entities.sql")
public class ArticleRepositoryIntegrationTest {
@Autowired
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/dao/repositories/ExtendedStudentRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/ExtendedStudentRepositoryIntegrationTest.java
similarity index 80%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/dao/repositories/ExtendedStudentRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/ExtendedStudentRepositoryIntegrationTest.java
index b19a34df82..66de5911db 100644
--- a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/dao/repositories/ExtendedStudentRepositoryIntegrationTest.java
+++ b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/ExtendedStudentRepositoryIntegrationTest.java
@@ -1,7 +1,10 @@
-package com.baeldung.dao.repositories;
+package com.baeldung.boot.daos;
+
+import com.baeldung.boot.Application;
+import com.baeldung.boot.config.PersistenceConfiguration;
+import com.baeldung.boot.daos.ExtendedStudentRepository;
+import com.baeldung.boot.domain.Student;
-import com.baeldung.config.PersistenceConfiguration;
-import com.baeldung.domain.Student;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -15,7 +18,7 @@ import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
@RunWith(SpringRunner.class)
-@ContextConfiguration(classes = {PersistenceConfiguration.class})
+@ContextConfiguration(classes = {Application.class})
@DirtiesContext
public class ExtendedStudentRepositoryIntegrationTest {
@Resource
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/dao/repositories/InventoryRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/InventoryRepositoryIntegrationTest.java
similarity index 85%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/dao/repositories/InventoryRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/InventoryRepositoryIntegrationTest.java
index 9d6334445c..877e59d5a2 100644
--- a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/dao/repositories/InventoryRepositoryIntegrationTest.java
+++ b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/InventoryRepositoryIntegrationTest.java
@@ -1,11 +1,15 @@
-package com.baeldung.dao.repositories;
+package com.baeldung.boot.daos;
+
+import com.baeldung.boot.Application;
+import com.baeldung.boot.config.PersistenceConfiguration;
+import com.baeldung.boot.daos.InventoryRepository;
+import com.baeldung.boot.domain.MerchandiseEntity;
-import com.baeldung.config.PersistenceConfiguration;
-import com.baeldung.domain.MerchandiseEntity;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
+import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.math.BigDecimal;
@@ -15,7 +19,7 @@ import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
@RunWith(SpringRunner.class)
-@DataJpaTest(excludeAutoConfiguration = {PersistenceConfiguration.class})
+@SpringBootTest(classes=Application.class)
public class InventoryRepositoryIntegrationTest {
private static final String ORIGINAL_TITLE = "Pair of Pants";
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/dao/repositories/JpaRepositoriesIntegrationTest.java b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/JpaRepositoriesIntegrationTest.java
similarity index 80%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/dao/repositories/JpaRepositoriesIntegrationTest.java
rename to persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/JpaRepositoriesIntegrationTest.java
index 01405c0b8a..30925d9b68 100644
--- a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/dao/repositories/JpaRepositoriesIntegrationTest.java
+++ b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/JpaRepositoriesIntegrationTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.dao.repositories;
+package com.baeldung.boot.daos;
import static junit.framework.TestCase.assertEquals;
import static junit.framework.TestCase.assertFalse;
@@ -13,18 +13,24 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
+import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
-import com.baeldung.config.PersistenceConfiguration;
-import com.baeldung.config.PersistenceProductConfiguration;
-import com.baeldung.config.PersistenceUserConfiguration;
-import com.baeldung.domain.Item;
-import com.baeldung.domain.ItemType;
-import com.baeldung.domain.Location;
-import com.baeldung.domain.Store;
+import com.baeldung.boot.Application;
+import com.baeldung.boot.config.PersistenceConfiguration;
+import com.baeldung.boot.daos.ItemTypeRepository;
+import com.baeldung.boot.daos.LocationRepository;
+import com.baeldung.boot.daos.ReadOnlyLocationRepository;
+import com.baeldung.boot.daos.StoreRepository;
+import com.baeldung.boot.domain.Item;
+import com.baeldung.boot.domain.ItemType;
+import com.baeldung.boot.domain.Location;
+import com.baeldung.boot.domain.Store;
+import com.baeldung.multipledb.PersistenceProductConfiguration;
+import com.baeldung.multipledb.PersistenceUserConfiguration;
@RunWith(SpringRunner.class)
-@DataJpaTest(excludeAutoConfiguration = { PersistenceConfiguration.class, PersistenceUserConfiguration.class, PersistenceProductConfiguration.class })
+@DataJpaTest(properties="spring.datasource.data=classpath:import_entities.sql")
public class JpaRepositoriesIntegrationTest {
@Autowired
private LocationRepository locationRepository;
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/dao/repositories/PersonInsertRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/PersonInsertRepositoryIntegrationTest.java
similarity index 94%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/dao/repositories/PersonInsertRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/PersonInsertRepositoryIntegrationTest.java
index b248cf8bf1..9d45c17035 100644
--- a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/dao/repositories/PersonInsertRepositoryIntegrationTest.java
+++ b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/PersonInsertRepositoryIntegrationTest.java
@@ -1,7 +1,8 @@
-package com.baeldung.dao.repositories;
+package com.baeldung.boot.daos;
+
+import com.baeldung.boot.daos.impl.PersonInsertRepository;
+import com.baeldung.boot.domain.Person;
-import com.baeldung.dao.repositories.impl.PersonInsertRepository;
-import com.baeldung.domain.Person;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
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
new file mode 100644
index 0000000000..e101d35de1
--- /dev/null
+++ b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/UserRepositoryCommon.java
@@ -0,0 +1,405 @@
+package com.baeldung.boot.daos;
+
+import com.baeldung.boot.domain.User;
+import com.baeldung.boot.user.UserRepository;
+
+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 java.util.*;
+import java.util.stream.Stream;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+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;
+
+ @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, USER_EMAIL, ACTIVE_STATUS));
+ userRepository.save(new User(USER_NAME_PETER, USER_EMAIL2, ACTIVE_STATUS));
+ userRepository.save(new User("SAMPLE", USER_EMAIL3, INACTIVE_STATUS));
+
+ List usersSortByName = userRepository.findAll(new Sort(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, USER_EMAIL, ACTIVE_STATUS));
+ userRepository.save(new User(USER_NAME_PETER, USER_EMAIL2, ACTIVE_STATUS));
+ userRepository.save(new User("SAMPLE", USER_EMAIL3, INACTIVE_STATUS));
+
+ userRepository.findAll(new Sort(Sort.Direction.ASC, "name"));
+
+ List usersSortByNameLength = userRepository.findAll(new Sort("LENGTH(name)"));
+
+ assertThat(usersSortByNameLength.get(0)
+ .getName()).isEqualTo(USER_NAME_ADAM);
+ }
+
+ @Test
+ public void givenUsersInDB_WhenFindAllSortWithFunctionQueryAnnotationJPQL_ThenReturnUsersSorted() {
+ userRepository.save(new User(USER_NAME_ADAM, USER_EMAIL, ACTIVE_STATUS));
+ userRepository.save(new User(USER_NAME_PETER, USER_EMAIL2, ACTIVE_STATUS));
+ userRepository.save(new User("SAMPLE", USER_EMAIL3, INACTIVE_STATUS));
+
+ userRepository.findAllUsers(new Sort("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, USER_EMAIL, ACTIVE_STATUS));
+ userRepository.save(new User(USER_NAME_PETER, USER_EMAIL2, ACTIVE_STATUS));
+ userRepository.save(new User("SAMPLE", USER_EMAIL3, INACTIVE_STATUS));
+ userRepository.save(new User("SAMPLE1", USER_EMAIL4, INACTIVE_STATUS));
+ userRepository.save(new User("SAMPLE2", USER_EMAIL5, INACTIVE_STATUS));
+ userRepository.save(new User("SAMPLE3", USER_EMAIL6, INACTIVE_STATUS));
+
+ Page usersPage = userRepository.findAllUsersWithPagination(new PageRequest(1, 3));
+
+ assertThat(usersPage.getContent()
+ .get(0)
+ .getName()).isEqualTo("SAMPLE1");
+ }
+
+ @Test
+ public void givenUsersInDB_WhenFindAllWithPageRequestQueryAnnotationNative_ThenReturnPageOfUsers() {
+ userRepository.save(new User(USER_NAME_ADAM, USER_EMAIL, ACTIVE_STATUS));
+ userRepository.save(new User(USER_NAME_PETER, USER_EMAIL2, ACTIVE_STATUS));
+ userRepository.save(new User("SAMPLE", USER_EMAIL3, INACTIVE_STATUS));
+ userRepository.save(new User("SAMPLE1", USER_EMAIL4, INACTIVE_STATUS));
+ userRepository.save(new User("SAMPLE2", USER_EMAIL5, INACTIVE_STATUS));
+ userRepository.save(new User("SAMPLE3", USER_EMAIL6, INACTIVE_STATUS));
+
+ Page usersSortByNameLength = userRepository.findAllUsersWithPaginationNative(new PageRequest(1, 3));
+
+ assertThat(usersSortByNameLength.getContent()
+ .get(0)
+ .getName()).isEqualTo("SAMPLE1");
+ }
+
+ @Test
+ @Transactional
+ public void givenUsersInDB_WhenUpdateStatusForNameModifyingQueryAnnotationJPQL_ThenModifyMatchingUsers() {
+ userRepository.save(new User("SAMPLE", USER_EMAIL, ACTIVE_STATUS));
+ userRepository.save(new User("SAMPLE1", USER_EMAIL2, ACTIVE_STATUS));
+ userRepository.save(new User("SAMPLE", USER_EMAIL3, ACTIVE_STATUS));
+ userRepository.save(new User("SAMPLE3", 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, ACTIVE_STATUS, USER_EMAIL);
+ userRepository.insertUser(USER_NAME_PETER, 1, ACTIVE_STATUS, USER_EMAIL2);
+
+ 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);
+ }
+
+ @After
+ public void cleanUp() {
+ userRepository.deleteAll();
+ }
+}
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/UserRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/UserRepositoryIntegrationTest.java
new file mode 100644
index 0000000000..ac8fdf8ea2
--- /dev/null
+++ b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/UserRepositoryIntegrationTest.java
@@ -0,0 +1,37 @@
+package com.baeldung.boot.daos;
+
+import com.baeldung.boot.Application;
+import com.baeldung.boot.config.PersistenceConfiguration;
+import com.baeldung.boot.domain.User;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.transaction.annotation.Transactional;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Created by adam.
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = Application.class)
+@DirtiesContext
+public class UserRepositoryIntegrationTest extends UserRepositoryCommon {
+
+ @Test
+ @Transactional
+ public void givenUsersInDBWhenUpdateStatusForNameModifyingQueryAnnotationNativeThenModifyMatchingUsers() {
+ userRepository.save(new User("SAMPLE", USER_EMAIL, ACTIVE_STATUS));
+ userRepository.save(new User("SAMPLE1", USER_EMAIL2, ACTIVE_STATUS));
+ userRepository.save(new User("SAMPLE", USER_EMAIL3, ACTIVE_STATUS));
+ userRepository.save(new User("SAMPLE3", USER_EMAIL4, ACTIVE_STATUS));
+ userRepository.flush();
+
+ int updatedUsersSize = userRepository.updateUserSetStatusForNameNative(INACTIVE_STATUS, "SAMPLE");
+
+ assertThat(updatedUsersSize).isEqualTo(2);
+ }
+}
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/UserRepositoryTCAutoIntegrationTest.java b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/UserRepositoryTCAutoIntegrationTest.java
new file mode 100644
index 0000000000..599546fdbf
--- /dev/null
+++ b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/UserRepositoryTCAutoIntegrationTest.java
@@ -0,0 +1,40 @@
+package com.baeldung.boot.daos;
+
+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 static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Created by adam.
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest
+@ActiveProfiles({"tc", "tc-auto"})
+public class UserRepositoryTCAutoIntegrationTest extends UserRepositoryCommon {
+
+ @ClassRule
+ public static PostgreSQLContainer postgreSQLContainer = BaeldungPostgresqlContainer.getInstance();
+
+ @Test
+ @Transactional
+ public void givenUsersInDB_WhenUpdateStatusForNameModifyingQueryAnnotationNativePostgres_ThenModifyMatchingUsers() {
+ userRepository.save(new User("SAMPLE", USER_EMAIL, ACTIVE_STATUS));
+ userRepository.save(new User("SAMPLE1", USER_EMAIL2, ACTIVE_STATUS));
+ userRepository.save(new User("SAMPLE", USER_EMAIL3, ACTIVE_STATUS));
+ userRepository.save(new User("SAMPLE3", 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/UserRepositoryTCIntegrationTest.java b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/UserRepositoryTCIntegrationTest.java
new file mode 100644
index 0000000000..2c5f7bcfa6
--- /dev/null
+++ b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/daos/UserRepositoryTCIntegrationTest.java
@@ -0,0 +1,56 @@
+package com.baeldung.boot.daos;
+
+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 com.baeldung.boot.domain.User;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+@ActiveProfiles("tc")
+@ContextConfiguration(initializers = {UserRepositoryTCIntegrationTest.Initializer.class})
+public class UserRepositoryTCIntegrationTest 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", USER_EMAIL, ACTIVE_STATUS));
+ userRepository.save(new User("SAMPLE1", USER_EMAIL2, ACTIVE_STATUS));
+ userRepository.save(new User("SAMPLE", USER_EMAIL3, ACTIVE_STATUS));
+ userRepository.save(new User("SAMPLE3", 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/ddd/event/Aggregate2EventsIntegrationTest.java b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/ddd/event/Aggregate2EventsIntegrationTest.java
similarity index 90%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/ddd/event/Aggregate2EventsIntegrationTest.java
rename to persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/ddd/event/Aggregate2EventsIntegrationTest.java
index 3f650d4d63..e76b932cb9 100644
--- a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/ddd/event/Aggregate2EventsIntegrationTest.java
+++ b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/ddd/event/Aggregate2EventsIntegrationTest.java
@@ -1,7 +1,7 @@
/**
*
*/
-package com.baeldung.ddd.event;
+package com.baeldung.boot.ddd.event;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.times;
@@ -15,6 +15,10 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
+import com.baeldung.boot.ddd.event.Aggregate2;
+import com.baeldung.boot.ddd.event.Aggregate2Repository;
+import com.baeldung.boot.ddd.event.DomainEvent;
+
@SpringJUnitConfig
@SpringBootTest
class Aggregate2EventsIntegrationTest {
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/ddd/event/Aggregate3EventsIntegrationTest.java b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/ddd/event/Aggregate3EventsIntegrationTest.java
similarity index 90%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/ddd/event/Aggregate3EventsIntegrationTest.java
rename to persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/ddd/event/Aggregate3EventsIntegrationTest.java
index 893dcac3f8..4193e932ee 100644
--- a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/ddd/event/Aggregate3EventsIntegrationTest.java
+++ b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/ddd/event/Aggregate3EventsIntegrationTest.java
@@ -1,7 +1,7 @@
/**
*
*/
-package com.baeldung.ddd.event;
+package com.baeldung.boot.ddd.event;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.times;
@@ -14,6 +14,10 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
+import com.baeldung.boot.ddd.event.Aggregate3;
+import com.baeldung.boot.ddd.event.Aggregate3Repository;
+import com.baeldung.boot.ddd.event.DomainEvent;
+
@SpringJUnitConfig
@SpringBootTest
class Aggregate3EventsIntegrationTest {
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/ddd/event/AggregateEventsIntegrationTest.java b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/ddd/event/AggregateEventsIntegrationTest.java
similarity index 91%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/ddd/event/AggregateEventsIntegrationTest.java
rename to persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/ddd/event/AggregateEventsIntegrationTest.java
index f0e1147245..ac607063b2 100644
--- a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/ddd/event/AggregateEventsIntegrationTest.java
+++ b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/ddd/event/AggregateEventsIntegrationTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.ddd.event;
+package com.baeldung.boot.ddd.event;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.times;
@@ -16,6 +16,11 @@ import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.annotation.Bean;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
+import com.baeldung.boot.ddd.event.Aggregate;
+import com.baeldung.boot.ddd.event.AggregateRepository;
+import com.baeldung.boot.ddd.event.DomainEvent;
+import com.baeldung.boot.ddd.event.DomainService;
+
@SpringJUnitConfig
@SpringBootTest
class AggregateEventsIntegrationTest {
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/ddd/event/TestEventHandler.java b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/ddd/event/TestEventHandler.java
similarity index 68%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/ddd/event/TestEventHandler.java
rename to persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/ddd/event/TestEventHandler.java
index 721402c17a..0f499834eb 100644
--- a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/ddd/event/TestEventHandler.java
+++ b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/ddd/event/TestEventHandler.java
@@ -1,10 +1,12 @@
/**
*
*/
-package com.baeldung.ddd.event;
+package com.baeldung.boot.ddd.event;
import org.springframework.transaction.event.TransactionalEventListener;
+import com.baeldung.boot.ddd.event.DomainEvent;
+
interface TestEventHandler {
@TransactionalEventListener
void handleEvent(DomainEvent event);
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/passenger/PassengerRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/passenger/PassengerRepositoryIntegrationTest.java
similarity index 97%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/passenger/PassengerRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/passenger/PassengerRepositoryIntegrationTest.java
index 8cd19cec03..afb97211f5 100644
--- a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/passenger/PassengerRepositoryIntegrationTest.java
+++ b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/passenger/PassengerRepositoryIntegrationTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.passenger;
+package com.baeldung.boot.passenger;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.contains;
@@ -24,6 +24,9 @@ import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.test.context.junit4.SpringRunner;
+import com.baeldung.boot.passenger.Passenger;
+import com.baeldung.boot.passenger.PassengerRepository;
+
@DataJpaTest
@RunWith(SpringRunner.class)
public class PassengerRepositoryIntegrationTest {
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/services/AbstractServicePersistenceIntegrationTest.java b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/services/AbstractServicePersistenceIntegrationTest.java
similarity index 98%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/services/AbstractServicePersistenceIntegrationTest.java
rename to persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/services/AbstractServicePersistenceIntegrationTest.java
index acac66f2f7..bf0c85fca6 100644
--- a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/services/AbstractServicePersistenceIntegrationTest.java
+++ b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/services/AbstractServicePersistenceIntegrationTest.java
@@ -1,6 +1,7 @@
-package com.baeldung.services;
+package com.baeldung.boot.services;
-import com.baeldung.domain.Foo;
+import com.baeldung.boot.domain.Foo;
+import com.baeldung.boot.services.IOperations;
import com.baeldung.util.IDUtil;
import org.hamcrest.Matchers;
import org.junit.Ignore;
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/services/FooServicePersistenceIntegrationTest.java b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/services/FooServicePersistenceIntegrationTest.java
similarity index 85%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/services/FooServicePersistenceIntegrationTest.java
rename to persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/services/FooServicePersistenceIntegrationTest.java
index fd17d033e1..f0e4aa7317 100644
--- a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/services/FooServicePersistenceIntegrationTest.java
+++ b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/services/FooServicePersistenceIntegrationTest.java
@@ -1,11 +1,16 @@
-package com.baeldung.services;
+package com.baeldung.boot.services;
+
+import com.baeldung.boot.Application;
+import com.baeldung.boot.config.PersistenceConfiguration;
+import com.baeldung.boot.domain.Foo;
+import com.baeldung.boot.services.IFooService;
+import com.baeldung.boot.services.IOperations;
-import com.baeldung.config.PersistenceConfiguration;
-import com.baeldung.domain.Foo;
import org.junit.Ignore;
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.dao.DataIntegrityViolationException;
import org.springframework.dao.InvalidDataAccessApiUsageException;
import org.springframework.test.context.ContextConfiguration;
@@ -16,7 +21,7 @@ import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic;
import static org.junit.Assert.assertNotNull;
@RunWith(SpringRunner.class)
-@ContextConfiguration(classes = {PersistenceConfiguration.class}, loader = AnnotationConfigContextLoader.class)
+@SpringBootTest(classes=Application.class)
public class FooServicePersistenceIntegrationTest extends AbstractServicePersistenceIntegrationTest {
@Autowired
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/services/SpringDataJPABarAuditIntegrationTest.java b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/services/SpringDataJPABarAuditIntegrationTest.java
similarity index 87%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/services/SpringDataJPABarAuditIntegrationTest.java
rename to persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/services/SpringDataJPABarAuditIntegrationTest.java
index f3b857c73d..810cf70769 100644
--- a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/services/SpringDataJPABarAuditIntegrationTest.java
+++ b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/boot/services/SpringDataJPABarAuditIntegrationTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.services;
+package com.baeldung.boot.services;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -16,16 +16,19 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.security.test.context.support.WithMockUser;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.support.AnnotationConfigContextLoader;
-import com.baeldung.config.PersistenceConfiguration;
-import com.baeldung.domain.Bar;
+import com.baeldung.boot.Application;
+import com.baeldung.boot.config.PersistenceConfiguration;
+import com.baeldung.boot.domain.Bar;
+import com.baeldung.boot.services.IBarService;
@RunWith(SpringRunner.class)
-@ContextConfiguration(classes = { PersistenceConfiguration.class }, loader = AnnotationConfigContextLoader.class)
+@SpringBootTest(classes=Application.class)
public class SpringDataJPABarAuditIntegrationTest {
private static Logger logger = LoggerFactory.getLogger(SpringDataJPABarAuditIntegrationTest.class);
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/services/JpaMultipleDBIntegrationTest.java b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/multipledb/JpaMultipleDBIntegrationTest.java
similarity index 83%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/services/JpaMultipleDBIntegrationTest.java
rename to persistence-modules/spring-data-jpa/src/test/java/com/baeldung/multipledb/JpaMultipleDBIntegrationTest.java
index 71a3fb0b44..74f347caae 100644
--- a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/services/JpaMultipleDBIntegrationTest.java
+++ b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/multipledb/JpaMultipleDBIntegrationTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.services;
+package com.baeldung.multipledb;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
@@ -10,6 +10,7 @@ import java.util.Optional;
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.dao.DataIntegrityViolationException;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
@@ -17,17 +18,17 @@ import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.Transactional;
-import com.baeldung.config.PersistenceProductConfiguration;
-import com.baeldung.config.PersistenceUserConfiguration;
-import com.baeldung.dao.repositories.product.ProductRepository;
-import com.baeldung.dao.repositories.user.PossessionRepository;
-import com.baeldung.dao.repositories.user.UserRepository;
-import com.baeldung.domain.product.Product;
-import com.baeldung.domain.user.Possession;
-import com.baeldung.domain.user.User;
+import com.baeldung.boot.domain.Possession;
+import com.baeldung.boot.domain.User;
+import com.baeldung.boot.user.PossessionRepository;
+import com.baeldung.boot.user.UserRepository;
+import com.baeldung.multipledb.PersistenceProductConfiguration;
+import com.baeldung.multipledb.PersistenceUserConfiguration;
+import com.baeldung.multipledb.Product;
+import com.baeldung.multipledb.ProductRepository;
@RunWith(SpringRunner.class)
-@ContextConfiguration(classes = { PersistenceUserConfiguration.class, PersistenceProductConfiguration.class })
+@SpringBootTest(classes=MultipleDbApplication.class)
@EnableTransactionManagement
@DirtiesContext
public class JpaMultipleDBIntegrationTest {
diff --git a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/dao/repositories/product/ProductRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/multipledb/ProductRepositoryIntegrationTest.java
similarity index 93%
rename from persistence-modules/spring-data-jpa/src/test/java/com/baeldung/dao/repositories/product/ProductRepositoryIntegrationTest.java
rename to persistence-modules/spring-data-jpa/src/test/java/com/baeldung/multipledb/ProductRepositoryIntegrationTest.java
index 4caa0f0ca4..7b85cb479a 100644
--- a/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/dao/repositories/product/ProductRepositoryIntegrationTest.java
+++ b/persistence-modules/spring-data-jpa/src/test/java/com/baeldung/multipledb/ProductRepositoryIntegrationTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.dao.repositories.product;
+package com.baeldung.multipledb;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasSize;
@@ -13,6 +13,7 @@ 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;
@@ -22,11 +23,12 @@ import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.Transactional;
-import com.baeldung.config.PersistenceProductConfiguration;
-import com.baeldung.domain.product.Product;
+import com.baeldung.multipledb.PersistenceProductConfiguration;
+import com.baeldung.multipledb.Product;
+import com.baeldung.multipledb.ProductRepository;
@RunWith(SpringRunner.class)
-@ContextConfiguration(classes = { PersistenceProductConfiguration.class })
+@SpringBootTest(classes=MultipleDbApplication.class)
@EnableTransactionManagement
public class ProductRepositoryIntegrationTest {
diff --git a/persistence-modules/spring-data-jpa/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/persistence-modules/spring-data-jpa/src/test/java/org/baeldung/SpringContextIntegrationTest.java
index 7f906bdbcd..e885d0fe51 100644
--- a/persistence-modules/spring-data-jpa/src/test/java/org/baeldung/SpringContextIntegrationTest.java
+++ b/persistence-modules/spring-data-jpa/src/test/java/org/baeldung/SpringContextIntegrationTest.java
@@ -5,7 +5,7 @@ import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
-import com.baeldung.Application;
+import com.baeldung.boot.Application;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
diff --git a/persistence-modules/spring-data-jpa/src/test/java/org/baeldung/SpringJpaContextIntegrationTest.java b/persistence-modules/spring-data-jpa/src/test/java/org/baeldung/SpringJpaContextIntegrationTest.java
index 66b5b20b97..4a36407884 100644
--- a/persistence-modules/spring-data-jpa/src/test/java/org/baeldung/SpringJpaContextIntegrationTest.java
+++ b/persistence-modules/spring-data-jpa/src/test/java/org/baeldung/SpringJpaContextIntegrationTest.java
@@ -6,10 +6,10 @@ import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
-import com.baeldung.Application;
-import com.baeldung.config.PersistenceConfiguration;
-import com.baeldung.config.PersistenceProductConfiguration;
-import com.baeldung.config.PersistenceUserConfiguration;
+import com.baeldung.boot.Application;
+import com.baeldung.boot.config.PersistenceConfiguration;
+import com.baeldung.multipledb.PersistenceProductConfiguration;
+import com.baeldung.multipledb.PersistenceUserConfiguration;
@RunWith(SpringRunner.class)
@DataJpaTest(excludeAutoConfiguration = {