diff --git a/persistence-modules/java-jpa-2/README.md b/persistence-modules/java-jpa-2/README.md
index d711eef1b0ff..c09ca906ba6c 100644
--- a/persistence-modules/java-jpa-2/README.md
+++ b/persistence-modules/java-jpa-2/README.md
@@ -4,9 +4,7 @@ This module contains articles about the Java Persistence API (JPA) in Java.
### Relevant Articles
-- [JPA Query Parameters Usage](https://www.baeldung.com/jpa-query-parameters)
- [Mapping Entity Class Names to SQL Table Names with JPA](https://www.baeldung.com/jpa-entity-table-names)
-- [Default Column Values in JPA](https://www.baeldung.com/jpa-default-column-values)
- [Types of JPA Queries](https://www.baeldung.com/jpa-queries)
- [JPA/Hibernate Projections](https://www.baeldung.com/jpa-hibernate-projections)
- [Combining JPA And/Or Criteria Predicates](https://www.baeldung.com/jpa-and-or-criteria-predicates)
diff --git a/persistence-modules/java-jpa-2/src/main/resources/META-INF/persistence.xml b/persistence-modules/java-jpa-2/src/main/resources/META-INF/persistence.xml
index 50b9813523f8..ea6755d6b8b4 100644
--- a/persistence-modules/java-jpa-2/src/main/resources/META-INF/persistence.xml
+++ b/persistence-modules/java-jpa-2/src/main/resources/META-INF/persistence.xml
@@ -39,23 +39,6 @@
-
- org.hibernate.jpa.HibernatePersistenceProvider
- com.baeldung.jpa.defaultvalues.User
- com.baeldung.jpa.defaultvalues.UserEntity
- true
-
-
-
-
-
-
-
-
-
-
-
-
org.hibernate.jpa.HibernatePersistenceProvider
com.baeldung.jpa.querytypes.UserEntity
diff --git a/persistence-modules/java-jpa-2/src/test/resources/META-INF/persistence.xml b/persistence-modules/java-jpa-2/src/test/resources/META-INF/persistence.xml
index 80ca1a3ead8c..ee86e4d545c3 100644
--- a/persistence-modules/java-jpa-2/src/test/resources/META-INF/persistence.xml
+++ b/persistence-modules/java-jpa-2/src/test/resources/META-INF/persistence.xml
@@ -4,24 +4,6 @@
version="3.0"
xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd">
-
- org.hibernate.jpa.HibernatePersistenceProvider
- com.baeldung.jpa.queryparams.Employee
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
org.hibernate.jpa.HibernatePersistenceProvider
@@ -39,23 +21,6 @@
-
- org.hibernate.jpa.HibernatePersistenceProvider
- com.baeldung.jpa.defaultvalues.User
- com.baeldung.jpa.defaultvalues.UserEntity
- true
-
-
-
-
-
-
-
-
-
-
-
-
org.hibernate.jpa.HibernatePersistenceProvider
com.baeldung.jpa.querytypes.UserEntity
diff --git a/persistence-modules/java-jpa-3/README.md b/persistence-modules/java-jpa-3/README.md
index 1cf7055413a2..e6b5f948e75a 100644
--- a/persistence-modules/java-jpa-3/README.md
+++ b/persistence-modules/java-jpa-3/README.md
@@ -10,7 +10,5 @@ This module contains articles about the Java Persistence API (JPA) in Java.
- [JPA CascadeType.REMOVE vs orphanRemoval](https://www.baeldung.com/jpa-cascade-remove-vs-orphanremoval)
- [A Guide to MultipleBagFetchException in Hibernate](https://www.baeldung.com/java-hibernate-multiplebagfetchexception)
- [How to Convert a Hibernate Proxy to a Real Entity Object](https://www.baeldung.com/hibernate-proxy-to-real-entity-object)
-- [Returning an Auto-Generated Id with JPA](https://www.baeldung.com/jpa-get-auto-generated-id)
- [How to Return Multiple Entities in JPA Query](https://www.baeldung.com/jpa-return-multiple-entities)
-- [Defining Unique Constraints in JPA](https://www.baeldung.com/jpa-unique-constraints)
- [Connecting to a Specific Schema in JDBC](https://www.baeldung.com/jdbc-connect-to-schema)
diff --git a/persistence-modules/java-jpa-3/src/main/resources/META-INF/persistence.xml b/persistence-modules/java-jpa-3/src/main/resources/META-INF/persistence.xml
index 140531e30fb2..c55f64dac22b 100644
--- a/persistence-modules/java-jpa-3/src/main/resources/META-INF/persistence.xml
+++ b/persistence-modules/java-jpa-3/src/main/resources/META-INF/persistence.xml
@@ -97,38 +97,7 @@
-
-
- org.hibernate.jpa.HibernatePersistenceProvider
- com.baeldung.jpa.IdGeneration.User
- true
-
-
-
-
-
-
-
-
-
-
-
-
- org.hibernate.jpa.HibernatePersistenceProvider
- com.baeldung.jpa.uniqueconstraints.Person
- com.baeldung.jpa.uniqueconstraints.Address
- true
-
-
-
-
-
-
-
-
-
-
-
+
org.hibernate.jpa.HibernatePersistenceProvider
com.baeldung.jpa.returnmultipleentities.Channel
diff --git a/persistence-modules/java-jpa-4/README.md b/persistence-modules/java-jpa-4/README.md
index 401caabfe0d5..8f92a55f5ca1 100644
--- a/persistence-modules/java-jpa-4/README.md
+++ b/persistence-modules/java-jpa-4/README.md
@@ -8,3 +8,9 @@ This module contains articles about the Java Persistence API (JPA) in Java.
- [Clear Managed Entities in JPA/Hibernate](https://www.baeldung.com/hibernate-clear-managed-entities)
- [Fixing the “Could Not Determine Recommended JdbcType for Class” Error in JPA](https://www.baeldung.com/jpa-could-not-determine-recommended-jdbctype-for-class)
- [How to Clone a JPA Entity](https://www.baeldung.com/java-jpa-clone-entity)
+- [A Guide to Stored Procedures with JPA](https://www.baeldung.com/jpa-stored-procedures)
+- [JPA @Basic Annotation](https://www.baeldung.com/jpa-basic-annotation)
+- [Fixing the JPA error “java.lang.String cannot be cast to Ljava.lang.String;”](https://www.baeldung.com/jpa-error-java-lang-string-cannot-be-cast)
+- [Converting Between LocalDate and SQL Date](https://www.baeldung.com/java-convert-localdate-sql-date)
+- [JPA Support for java.time Types](https://www.baeldung.com/jpa-java-time)
+- [A Guide to SqlResultSetMapping](https://www.baeldung.com/jpa-sql-resultset-mapping)
diff --git a/persistence-modules/java-jpa-4/pom.xml b/persistence-modules/java-jpa-4/pom.xml
index 7b0e347d4198..59d387705594 100644
--- a/persistence-modules/java-jpa-4/pom.xml
+++ b/persistence-modules/java-jpa-4/pom.xml
@@ -50,6 +50,11 @@
modelmapper
${modelmapper.version}
+
+ com.mysql
+ mysql-connector-j
+ ${mysql.version}
+
@@ -74,6 +79,7 @@
2.17.0
1.9.4
3.2.1
+ 8.4.0
\ No newline at end of file
diff --git a/persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/basicannotation/Course.java b/persistence-modules/java-jpa-4/src/main/java/com/baeldung/jpa/basicannotation/Course.java
similarity index 100%
rename from persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/basicannotation/Course.java
rename to persistence-modules/java-jpa-4/src/main/java/com/baeldung/jpa/basicannotation/Course.java
diff --git a/persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/convertdates/LocalDateConverter.java b/persistence-modules/java-jpa-4/src/main/java/com/baeldung/jpa/convertdates/LocalDateConverter.java
similarity index 100%
rename from persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/convertdates/LocalDateConverter.java
rename to persistence-modules/java-jpa-4/src/main/java/com/baeldung/jpa/convertdates/LocalDateConverter.java
diff --git a/persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/datetime/DateTimeEntityRepository.java b/persistence-modules/java-jpa-4/src/main/java/com/baeldung/jpa/datetime/DateTimeEntityRepository.java
similarity index 97%
rename from persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/datetime/DateTimeEntityRepository.java
rename to persistence-modules/java-jpa-4/src/main/java/com/baeldung/jpa/datetime/DateTimeEntityRepository.java
index 2aa6fa60b6b6..2e6f5aa7a157 100644
--- a/persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/datetime/DateTimeEntityRepository.java
+++ b/persistence-modules/java-jpa-4/src/main/java/com/baeldung/jpa/datetime/DateTimeEntityRepository.java
@@ -1,68 +1,68 @@
-package com.baeldung.jpa.datetime;
-
-import jakarta.persistence.EntityManager;
-import jakarta.persistence.EntityManagerFactory;
-import jakarta.persistence.Persistence;
-import java.sql.Date;
-import java.sql.Time;
-import java.sql.Timestamp;
-import java.time.*;
-import java.util.Calendar;
-
-public class DateTimeEntityRepository {
- private EntityManagerFactory emf = null;
-
- public DateTimeEntityRepository() {
- emf = Persistence.createEntityManagerFactory("java8-datetime-postgresql");
- }
-
- public JPA22DateTimeEntity find(Long id) {
- EntityManager entityManager = emf.createEntityManager();
-
- JPA22DateTimeEntity dateTimeTypes = entityManager.find(JPA22DateTimeEntity.class, id);
-
- entityManager.close();
- return dateTimeTypes;
- }
-
- public void save(Long id) {
- JPA22DateTimeEntity dateTimeTypes = new JPA22DateTimeEntity();
- dateTimeTypes.setId(id);
-
- //java.sql types: date/time
- dateTimeTypes.setSqlTime(Time.valueOf(LocalTime.now()));
- dateTimeTypes.setSqlDate(Date.valueOf(LocalDate.now()));
- dateTimeTypes.setSqlTimestamp(Timestamp.valueOf(LocalDateTime.now()));
-
- //java.util types: date/calendar
- java.util.Date date = new java.util.Date();
- dateTimeTypes.setUtilTime(date);
- dateTimeTypes.setUtilDate(date);
- dateTimeTypes.setUtilTimestamp(date);
-
- //Calendar
- Calendar calendar = Calendar.getInstance();
- dateTimeTypes.setCalendarTime(calendar);
- dateTimeTypes.setCalendarDate(calendar);
- dateTimeTypes.setCalendarTimestamp(calendar);
-
- //java.time types
- dateTimeTypes.setLocalTime(LocalTime.now());
- dateTimeTypes.setLocalDate(LocalDate.now());
- dateTimeTypes.setLocalDateTime(LocalDateTime.now());
-
- //java.time types with offset
- dateTimeTypes.setOffsetTime(OffsetTime.now());
- dateTimeTypes.setOffsetDateTime(OffsetDateTime.now());
-
- EntityManager entityManager = emf.createEntityManager();
- entityManager.getTransaction().begin();
- entityManager.persist(dateTimeTypes);
- entityManager.getTransaction().commit();
- entityManager.close();
- }
-
- public void clean() {
- emf.close();
- }
-}
+package com.baeldung.jpa.datetime;
+
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.Persistence;
+import java.sql.Date;
+import java.sql.Time;
+import java.sql.Timestamp;
+import java.time.*;
+import java.util.Calendar;
+
+public class DateTimeEntityRepository {
+ private EntityManagerFactory emf = null;
+
+ public DateTimeEntityRepository() {
+ emf = Persistence.createEntityManagerFactory("java8-datetime-postgresql");
+ }
+
+ public JPA22DateTimeEntity find(Long id) {
+ EntityManager entityManager = emf.createEntityManager();
+
+ JPA22DateTimeEntity dateTimeTypes = entityManager.find(JPA22DateTimeEntity.class, id);
+
+ entityManager.close();
+ return dateTimeTypes;
+ }
+
+ public void save(Long id) {
+ JPA22DateTimeEntity dateTimeTypes = new JPA22DateTimeEntity();
+ dateTimeTypes.setId(id);
+
+ //java.sql types: date/time
+ dateTimeTypes.setSqlTime(Time.valueOf(LocalTime.now()));
+ dateTimeTypes.setSqlDate(Date.valueOf(LocalDate.now()));
+ dateTimeTypes.setSqlTimestamp(Timestamp.valueOf(LocalDateTime.now()));
+
+ //java.util types: date/calendar
+ java.util.Date date = new java.util.Date();
+ dateTimeTypes.setUtilTime(date);
+ dateTimeTypes.setUtilDate(date);
+ dateTimeTypes.setUtilTimestamp(date);
+
+ //Calendar
+ Calendar calendar = Calendar.getInstance();
+ dateTimeTypes.setCalendarTime(calendar);
+ dateTimeTypes.setCalendarDate(calendar);
+ dateTimeTypes.setCalendarTimestamp(calendar);
+
+ //java.time types
+ dateTimeTypes.setLocalTime(LocalTime.now());
+ dateTimeTypes.setLocalDate(LocalDate.now());
+ dateTimeTypes.setLocalDateTime(LocalDateTime.now());
+
+ //java.time types with offset
+ dateTimeTypes.setOffsetTime(OffsetTime.now());
+ dateTimeTypes.setOffsetDateTime(OffsetDateTime.now());
+
+ EntityManager entityManager = emf.createEntityManager();
+ entityManager.getTransaction().begin();
+ entityManager.persist(dateTimeTypes);
+ entityManager.getTransaction().commit();
+ entityManager.close();
+ }
+
+ public void clean() {
+ emf.close();
+ }
+}
diff --git a/persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/datetime/JPA22DateTimeEntity.java b/persistence-modules/java-jpa-4/src/main/java/com/baeldung/jpa/datetime/JPA22DateTimeEntity.java
similarity index 100%
rename from persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/datetime/JPA22DateTimeEntity.java
rename to persistence-modules/java-jpa-4/src/main/java/com/baeldung/jpa/datetime/JPA22DateTimeEntity.java
diff --git a/persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/datetime/MainApp.java b/persistence-modules/java-jpa-4/src/main/java/com/baeldung/jpa/datetime/MainApp.java
similarity index 96%
rename from persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/datetime/MainApp.java
rename to persistence-modules/java-jpa-4/src/main/java/com/baeldung/jpa/datetime/MainApp.java
index 7f23f44254d3..061acce0d808 100644
--- a/persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/datetime/MainApp.java
+++ b/persistence-modules/java-jpa-4/src/main/java/com/baeldung/jpa/datetime/MainApp.java
@@ -1,18 +1,18 @@
-package com.baeldung.jpa.datetime;
-
-public class MainApp {
-
- public static void main(String... args) {
-
- DateTimeEntityRepository dateTimeEntityRepository = new DateTimeEntityRepository();
-
- //Persist
- dateTimeEntityRepository.save(100L);
-
- //Find
- JPA22DateTimeEntity dateTimeEntity = dateTimeEntityRepository.find(100L);
-
- dateTimeEntityRepository.clean();
- }
-
+package com.baeldung.jpa.datetime;
+
+public class MainApp {
+
+ public static void main(String... args) {
+
+ DateTimeEntityRepository dateTimeEntityRepository = new DateTimeEntityRepository();
+
+ //Persist
+ dateTimeEntityRepository.save(100L);
+
+ //Find
+ JPA22DateTimeEntity dateTimeEntity = dateTimeEntityRepository.find(100L);
+
+ dateTimeEntityRepository.clean();
+ }
+
}
\ No newline at end of file
diff --git a/persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/model/Car.java b/persistence-modules/java-jpa-4/src/main/java/com/baeldung/jpa/model/Car.java
similarity index 100%
rename from persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/model/Car.java
rename to persistence-modules/java-jpa-4/src/main/java/com/baeldung/jpa/model/Car.java
diff --git a/persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/sqlresultsetmapping/Employee.java b/persistence-modules/java-jpa-4/src/main/java/com/baeldung/jpa/sqlresultsetmapping/Employee.java
similarity index 100%
rename from persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/sqlresultsetmapping/Employee.java
rename to persistence-modules/java-jpa-4/src/main/java/com/baeldung/jpa/sqlresultsetmapping/Employee.java
diff --git a/persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/sqlresultsetmapping/ScheduledDay.java b/persistence-modules/java-jpa-4/src/main/java/com/baeldung/jpa/sqlresultsetmapping/ScheduledDay.java
similarity index 100%
rename from persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/sqlresultsetmapping/ScheduledDay.java
rename to persistence-modules/java-jpa-4/src/main/java/com/baeldung/jpa/sqlresultsetmapping/ScheduledDay.java
diff --git a/persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/stringcast/Message.java b/persistence-modules/java-jpa-4/src/main/java/com/baeldung/jpa/stringcast/Message.java
similarity index 100%
rename from persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/stringcast/Message.java
rename to persistence-modules/java-jpa-4/src/main/java/com/baeldung/jpa/stringcast/Message.java
diff --git a/persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/stringcast/QueryExecutor.java b/persistence-modules/java-jpa-4/src/main/java/com/baeldung/jpa/stringcast/QueryExecutor.java
similarity index 100%
rename from persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/stringcast/QueryExecutor.java
rename to persistence-modules/java-jpa-4/src/main/java/com/baeldung/jpa/stringcast/QueryExecutor.java
diff --git a/persistence-modules/java-jpa-4/src/main/resources/META-INF/persistence.xml b/persistence-modules/java-jpa-4/src/main/resources/META-INF/persistence.xml
index f1908cceaab4..bc0ee67d6b4c 100644
--- a/persistence-modules/java-jpa-4/src/main/resources/META-INF/persistence.xml
+++ b/persistence-modules/java-jpa-4/src/main/resources/META-INF/persistence.xml
@@ -179,4 +179,72 @@
+
+
+ org.hibernate.jpa.HibernatePersistenceProvider
+ com.baeldung.jpa.model.Car
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+ org.hibernate.jpa.HibernatePersistenceProvider
+ com.baeldung.jpa.sqlresultsetmapping.ScheduledDay
+ com.baeldung.jpa.sqlresultsetmapping.Employee
+ com.baeldung.jpa.basicannotation.Course
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+ org.hibernate.jpa.HibernatePersistenceProvider
+ com.baeldung.jpa.stringcast.Message
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+ org.eclipse.persistence.jpa.PersistenceProvider
+ com.baeldung.jpa.datetime.JPA22DateTimeEntity
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/persistence-modules/java-jpa/src/main/resources/config/database/FindCarByYearProcedureMySQL.sql b/persistence-modules/java-jpa-4/src/main/resources/config/database/FindCarByYearProcedureMySQL.sql
similarity index 100%
rename from persistence-modules/java-jpa/src/main/resources/config/database/FindCarByYearProcedureMySQL.sql
rename to persistence-modules/java-jpa-4/src/main/resources/config/database/FindCarByYearProcedureMySQL.sql
diff --git a/persistence-modules/java-jpa/src/main/resources/config/database/create_table_mysql.sql b/persistence-modules/java-jpa-4/src/main/resources/config/database/create_table_mysql.sql
similarity index 100%
rename from persistence-modules/java-jpa/src/main/resources/config/database/create_table_mysql.sql
rename to persistence-modules/java-jpa-4/src/main/resources/config/database/create_table_mysql.sql
diff --git a/persistence-modules/java-jpa/src/main/resources/config/database/insert_cars.sql b/persistence-modules/java-jpa-4/src/main/resources/config/database/insert_cars.sql
similarity index 100%
rename from persistence-modules/java-jpa/src/main/resources/config/database/insert_cars.sql
rename to persistence-modules/java-jpa-4/src/main/resources/config/database/insert_cars.sql
diff --git a/persistence-modules/java-jpa/src/main/resources/database.sql b/persistence-modules/java-jpa-4/src/main/resources/database.sql
similarity index 96%
rename from persistence-modules/java-jpa/src/main/resources/database.sql
rename to persistence-modules/java-jpa-4/src/main/resources/database.sql
index 96fa5b3b0967..2242322ba7b2 100644
--- a/persistence-modules/java-jpa/src/main/resources/database.sql
+++ b/persistence-modules/java-jpa-4/src/main/resources/database.sql
@@ -1,3 +1,8 @@
+
+CREATE TABLE COURSE
+(id BIGINT,
+ name VARCHAR(10));
+
CREATE TABLE EMPLOYEE
(id BIGINT,
name VARCHAR(10));
@@ -15,7 +20,3 @@ INSERT INTO SCHEDULE_DAYS (employeeId, dayOfWeek) VALUES (1, 'FRIDAY');
INSERT INTO SCHEDULE_DAYS (employeeId, dayOfWeek) VALUES (2, 'SATURDAY');
INSERT INTO SCHEDULE_DAYS (employeeId, dayOfWeek) VALUES (3, 'MONDAY');
INSERT INTO SCHEDULE_DAYS (employeeId, dayOfWeek) VALUES (3, 'FRIDAY');
-
-CREATE TABLE COURSE
-(id BIGINT,
- name VARCHAR(10));
\ No newline at end of file
diff --git a/persistence-modules/java-jpa/src/test/java/com/baeldung/jpa/basicannotation/BasicAnnotationIntegrationTest.java b/persistence-modules/java-jpa-4/src/test/java/com/baeldung/jpa/basicannotation/BasicAnnotationIntegrationTest.java
similarity index 100%
rename from persistence-modules/java-jpa/src/test/java/com/baeldung/jpa/basicannotation/BasicAnnotationIntegrationTest.java
rename to persistence-modules/java-jpa-4/src/test/java/com/baeldung/jpa/basicannotation/BasicAnnotationIntegrationTest.java
diff --git a/persistence-modules/java-jpa/src/test/java/com/baeldung/jpa/convertdates/LocalDateTimeToSqlDateUnitTest.java b/persistence-modules/java-jpa-4/src/test/java/com/baeldung/jpa/convertdates/LocalDateTimeToSqlDateUnitTest.java
similarity index 100%
rename from persistence-modules/java-jpa/src/test/java/com/baeldung/jpa/convertdates/LocalDateTimeToSqlDateUnitTest.java
rename to persistence-modules/java-jpa-4/src/test/java/com/baeldung/jpa/convertdates/LocalDateTimeToSqlDateUnitTest.java
diff --git a/persistence-modules/java-jpa/src/test/java/com/baeldung/jpa/sqlresultsetmapping/SqlResultSetMappingUnitTest.java b/persistence-modules/java-jpa-4/src/test/java/com/baeldung/jpa/sqlresultsetmapping/SqlResultSetMappingUnitTest.java
similarity index 100%
rename from persistence-modules/java-jpa/src/test/java/com/baeldung/jpa/sqlresultsetmapping/SqlResultSetMappingUnitTest.java
rename to persistence-modules/java-jpa-4/src/test/java/com/baeldung/jpa/sqlresultsetmapping/SqlResultSetMappingUnitTest.java
diff --git a/persistence-modules/java-jpa/src/test/java/com/baeldung/jpa/storedprocedure/StoredProcedureLiveTest.java b/persistence-modules/java-jpa-4/src/test/java/com/baeldung/jpa/storedprocedure/StoredProcedureLiveTest.java
similarity index 100%
rename from persistence-modules/java-jpa/src/test/java/com/baeldung/jpa/storedprocedure/StoredProcedureLiveTest.java
rename to persistence-modules/java-jpa-4/src/test/java/com/baeldung/jpa/storedprocedure/StoredProcedureLiveTest.java
diff --git a/persistence-modules/java-jpa/src/test/java/com/baeldung/jpa/stringcast/SpringCastUnitTest.java b/persistence-modules/java-jpa-4/src/test/java/com/baeldung/jpa/stringcast/SpringCastUnitTest.java
similarity index 100%
rename from persistence-modules/java-jpa/src/test/java/com/baeldung/jpa/stringcast/SpringCastUnitTest.java
rename to persistence-modules/java-jpa-4/src/test/java/com/baeldung/jpa/stringcast/SpringCastUnitTest.java
diff --git a/persistence-modules/java-jpa/src/test/resources/employees.sql b/persistence-modules/java-jpa-4/src/test/resources/employees.sql
similarity index 100%
rename from persistence-modules/java-jpa/src/test/resources/employees.sql
rename to persistence-modules/java-jpa-4/src/test/resources/employees.sql
diff --git a/persistence-modules/java-jpa/src/test/resources/scheduledDays.sql b/persistence-modules/java-jpa-4/src/test/resources/scheduledDays.sql
similarity index 100%
rename from persistence-modules/java-jpa/src/test/resources/scheduledDays.sql
rename to persistence-modules/java-jpa-4/src/test/resources/scheduledDays.sql
diff --git a/persistence-modules/java-jpa/README.md b/persistence-modules/java-jpa/README.md
index f6410f7b0ef7..63912f2acd0d 100644
--- a/persistence-modules/java-jpa/README.md
+++ b/persistence-modules/java-jpa/README.md
@@ -4,14 +4,12 @@ This module contains articles about the Java Persistence API (JPA) in Java.
### Relevant Articles
-- [A Guide to SqlResultSetMapping](https://www.baeldung.com/jpa-sql-resultset-mapping)
-- [A Guide to Stored Procedures with JPA](https://www.baeldung.com/jpa-stored-procedures)
-- [Fixing the JPA error “java.lang.String cannot be cast to Ljava.lang.String;”](https://www.baeldung.com/jpa-error-java-lang-string-cannot-be-cast)
- [JPA Entity Graph](https://www.baeldung.com/jpa-entity-graph)
-- [JPA Support for java.time Types](https://www.baeldung.com/jpa-java-time)
-- [Converting Between LocalDate and SQL Date](https://www.baeldung.com/java-convert-localdate-sql-date)
- [Composite Primary Keys in JPA](https://www.baeldung.com/jpa-composite-primary-keys)
- [Defining JPA Entities](https://www.baeldung.com/jpa-entities)
-- [JPA @Basic Annotation](https://www.baeldung.com/jpa-basic-annotation)
- [Persisting Enums in JPA](https://www.baeldung.com/jpa-persisting-enums-in-jpa)
- More articles: [[next -->]](/persistence-modules/java-jpa-2)
+- [JPA Query Parameters Usage](https://www.baeldung.com/jpa-query-parameters)
+- [Default Column Values in JPA](https://www.baeldung.com/jpa-default-column-values)
+- [Returning an Auto-Generated Id with JPA](https://www.baeldung.com/jpa-get-auto-generated-id)
+- [Defining Unique Constraints in JPA](https://www.baeldung.com/jpa-unique-constraints)
diff --git a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/IdGeneration/User.java b/persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/IdGeneration/User.java
similarity index 100%
rename from persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/IdGeneration/User.java
rename to persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/IdGeneration/User.java
diff --git a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/IdGeneration/UserService.java b/persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/IdGeneration/UserService.java
similarity index 100%
rename from persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/IdGeneration/UserService.java
rename to persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/IdGeneration/UserService.java
diff --git a/persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/defaultvalues/User.java b/persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/defaultvalues/User.java
similarity index 100%
rename from persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/defaultvalues/User.java
rename to persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/defaultvalues/User.java
diff --git a/persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/defaultvalues/UserEntity.java b/persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/defaultvalues/UserEntity.java
similarity index 100%
rename from persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/defaultvalues/UserEntity.java
rename to persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/defaultvalues/UserEntity.java
diff --git a/persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/defaultvalues/UserEntityRepository.java b/persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/defaultvalues/UserEntityRepository.java
similarity index 100%
rename from persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/defaultvalues/UserEntityRepository.java
rename to persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/defaultvalues/UserEntityRepository.java
diff --git a/persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/defaultvalues/UserRepository.java b/persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/defaultvalues/UserRepository.java
similarity index 100%
rename from persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/defaultvalues/UserRepository.java
rename to persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/defaultvalues/UserRepository.java
diff --git a/persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/queryparams/Employee.java b/persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/queryparams/Employee.java
similarity index 100%
rename from persistence-modules/java-jpa-2/src/main/java/com/baeldung/jpa/queryparams/Employee.java
rename to persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/queryparams/Employee.java
diff --git a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/uniqueconstraints/Address.java b/persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/uniqueconstraints/Address.java
similarity index 100%
rename from persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/uniqueconstraints/Address.java
rename to persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/uniqueconstraints/Address.java
diff --git a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/uniqueconstraints/Person.java b/persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/uniqueconstraints/Person.java
similarity index 100%
rename from persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/uniqueconstraints/Person.java
rename to persistence-modules/java-jpa/src/main/java/com/baeldung/jpa/uniqueconstraints/Person.java
diff --git a/persistence-modules/java-jpa/src/main/resources/META-INF/persistence.xml b/persistence-modules/java-jpa/src/main/resources/META-INF/persistence.xml
index 2261a45d0831..ac14237723ae 100644
--- a/persistence-modules/java-jpa/src/main/resources/META-INF/persistence.xml
+++ b/persistence-modules/java-jpa/src/main/resources/META-INF/persistence.xml
@@ -4,27 +4,8 @@
version="3.0"
xsi:schemaLocation="https://jakarta.ee/xml/ns/persistence https://jakarta.ee/xml/ns/persistence/persistence_3_0.xsd">
-
- org.hibernate.jpa.HibernatePersistenceProvider
- com.baeldung.jpa.sqlresultsetmapping.ScheduledDay
- com.baeldung.jpa.sqlresultsetmapping.Employee
- com.baeldung.jpa.basicannotation.Course
- true
-
-
-
-
-
-
-
-
-
-
-
-
org.hibernate.jpa.HibernatePersistenceProvider
- com.baeldung.jpa.stringcast.Message
com.baeldung.jpa.enums.Article
com.baeldung.jpa.enums.CategoryConverter
true
@@ -40,21 +21,6 @@
-
- org.hibernate.jpa.HibernatePersistenceProvider
- com.baeldung.jpa.model.Car
- true
-
-
-
-
-
-
-
-
-
-
-
com.baeldung.jpa.entitygraph.model.Post
com.baeldung.jpa.entitygraph.model.User
@@ -69,25 +35,6 @@
-
- org.eclipse.persistence.jpa.PersistenceProvider
- com.baeldung.jpa.datetime.JPA22DateTimeEntity
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
org.hibernate.jpa.HibernatePersistenceProvider
com.baeldung.jpa.entity.Student
@@ -107,5 +54,56 @@
+
+
+ org.hibernate.jpa.HibernatePersistenceProvider
+ com.baeldung.jpa.defaultvalues.User
+ com.baeldung.jpa.defaultvalues.UserEntity
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ org.hibernate.jpa.HibernatePersistenceProvider
+ com.baeldung.jpa.IdGeneration.User
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+ org.hibernate.jpa.HibernatePersistenceProvider
+ com.baeldung.jpa.uniqueconstraints.Person
+ com.baeldung.jpa.uniqueconstraints.Address
+ true
+
+
+
+
+
+
+
+
+
+
+
diff --git a/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/IdGeneration/IdGenerationIntegrationTest.java b/persistence-modules/java-jpa/src/test/java/com/baeldung/jpa/IdGeneration/IdGenerationIntegrationTest.java
similarity index 100%
rename from persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/IdGeneration/IdGenerationIntegrationTest.java
rename to persistence-modules/java-jpa/src/test/java/com/baeldung/jpa/IdGeneration/IdGenerationIntegrationTest.java
diff --git a/persistence-modules/java-jpa-2/src/test/java/com/baeldung/jpa/defaultvalues/UserDefaultValuesUnitTest.java b/persistence-modules/java-jpa/src/test/java/com/baeldung/jpa/defaultvalues/UserDefaultValuesUnitTest.java
similarity index 100%
rename from persistence-modules/java-jpa-2/src/test/java/com/baeldung/jpa/defaultvalues/UserDefaultValuesUnitTest.java
rename to persistence-modules/java-jpa/src/test/java/com/baeldung/jpa/defaultvalues/UserDefaultValuesUnitTest.java
diff --git a/persistence-modules/java-jpa-2/src/test/java/com/baeldung/jpa/queryparams/JPAQueryParamsUnitTest.java b/persistence-modules/java-jpa/src/test/java/com/baeldung/jpa/queryparams/JPAQueryParamsUnitTest.java
similarity index 100%
rename from persistence-modules/java-jpa-2/src/test/java/com/baeldung/jpa/queryparams/JPAQueryParamsUnitTest.java
rename to persistence-modules/java-jpa/src/test/java/com/baeldung/jpa/queryparams/JPAQueryParamsUnitTest.java
diff --git a/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/uniqueconstraints/UniqueColumnIntegrationTest.java b/persistence-modules/java-jpa/src/test/java/com/baeldung/jpa/uniqueconstraints/UniqueColumnIntegrationTest.java
similarity index 91%
rename from persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/uniqueconstraints/UniqueColumnIntegrationTest.java
rename to persistence-modules/java-jpa/src/test/java/com/baeldung/jpa/uniqueconstraints/UniqueColumnIntegrationTest.java
index 5a275f5a440b..229062e7e3f5 100644
--- a/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/uniqueconstraints/UniqueColumnIntegrationTest.java
+++ b/persistence-modules/java-jpa/src/test/java/com/baeldung/jpa/uniqueconstraints/UniqueColumnIntegrationTest.java
@@ -2,15 +2,15 @@
import java.util.Optional;
-import jakarta.persistence.EntityManager;
-import jakarta.persistence.EntityManagerFactory;
-import jakarta.persistence.Persistence;
-
-import org.hibernate.exception.ConstraintViolationException;
+import org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException;
import org.junit.Assert;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.Persistence;
+
public class UniqueColumnIntegrationTest {
private static EntityManagerFactory factory;
@@ -44,7 +44,7 @@ public void whenPersistPersonWithSameNumber_thenConstraintViolationException() {
} catch (Exception ex) {
Assert.assertTrue(Optional.of(ex)
.map(Throwable::getCause)
- .filter(x -> x instanceof ConstraintViolationException)
+ .filter(x -> x instanceof JdbcSQLIntegrityConstraintViolationException)
.isPresent());
} finally {
entityManager.getTransaction().rollback();
@@ -73,7 +73,7 @@ public void whenPersistPersonWithSameEmail_thenConstraintViolationException() {
} catch (Exception ex) {
Assert.assertTrue(Optional.of(ex)
.map(Throwable::getCause)
- .filter(x -> x instanceof ConstraintViolationException)
+ .filter(x -> x instanceof JdbcSQLIntegrityConstraintViolationException)
.isPresent());
} finally {
entityManager.getTransaction().rollback();
@@ -107,7 +107,7 @@ public void whenPersistPersonWithSameAddress_thenConstraintViolationException()
} catch (Exception ex) {
Assert.assertTrue(Optional.of(ex)
.map(Throwable::getCause)
- .filter(x -> x instanceof ConstraintViolationException)
+ .filter(x -> x instanceof JdbcSQLIntegrityConstraintViolationException)
.isPresent());
} finally {
entityManager.getTransaction().rollback();
diff --git a/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/uniqueconstraints/UniqueConstraintIntegrationTest.java b/persistence-modules/java-jpa/src/test/java/com/baeldung/jpa/uniqueconstraints/UniqueConstraintIntegrationTest.java
similarity index 91%
rename from persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/uniqueconstraints/UniqueConstraintIntegrationTest.java
rename to persistence-modules/java-jpa/src/test/java/com/baeldung/jpa/uniqueconstraints/UniqueConstraintIntegrationTest.java
index 2bfbfd4ba69a..bf91636f258b 100644
--- a/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/uniqueconstraints/UniqueConstraintIntegrationTest.java
+++ b/persistence-modules/java-jpa/src/test/java/com/baeldung/jpa/uniqueconstraints/UniqueConstraintIntegrationTest.java
@@ -2,15 +2,15 @@
import java.util.Optional;
-import jakarta.persistence.EntityManager;
-import jakarta.persistence.EntityManagerFactory;
-import jakarta.persistence.Persistence;
-
-import org.hibernate.exception.ConstraintViolationException;
+import org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException;
import org.junit.Assert;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
+import jakarta.persistence.EntityManager;
+import jakarta.persistence.EntityManagerFactory;
+import jakarta.persistence.Persistence;
+
public class UniqueConstraintIntegrationTest {
private static EntityManagerFactory factory;
private static EntityManager entityManager;
@@ -43,7 +43,7 @@ public void whenPersistPersonWithSameNumberAndStatus_thenConstraintViolationExce
} catch (Exception ex) {
Assert.assertTrue(Optional.of(ex)
.map(Throwable::getCause)
- .filter(x -> x instanceof ConstraintViolationException)
+ .filter(x -> x instanceof JdbcSQLIntegrityConstraintViolationException)
.isPresent());
} finally {
entityManager.getTransaction().rollback();
@@ -72,7 +72,7 @@ public void whenPersistPersonWithSameSCodeAndDecode_thenConstraintViolationExcep
} catch (Exception ex) {
Assert.assertTrue(Optional.of(ex)
.map(Throwable::getCause)
- .filter(x -> x instanceof ConstraintViolationException)
+ .filter(x -> x instanceof JdbcSQLIntegrityConstraintViolationException)
.isPresent());
} finally {
entityManager.getTransaction().rollback();
@@ -104,7 +104,7 @@ public void whenPersistPersonWithSameNumberAndAddress_thenConstraintViolationExc
} catch (Exception ex) {
Assert.assertTrue(Optional.of(ex)
.map(Throwable::getCause)
- .filter(x -> x instanceof ConstraintViolationException)
+ .filter(x -> x instanceof JdbcSQLIntegrityConstraintViolationException)
.isPresent());
} finally {
entityManager.getTransaction().rollback();
diff --git a/persistence-modules/java-jpa/src/test/resources/META-INF/persistence.xml b/persistence-modules/java-jpa/src/test/resources/META-INF/persistence.xml
new file mode 100644
index 000000000000..75ca7c425a5a
--- /dev/null
+++ b/persistence-modules/java-jpa/src/test/resources/META-INF/persistence.xml
@@ -0,0 +1,42 @@
+
+
+
+
+ org.hibernate.jpa.HibernatePersistenceProvider
+ com.baeldung.jpa.queryparams.Employee
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ org.hibernate.jpa.HibernatePersistenceProvider
+ com.baeldung.jpa.defaultvalues.User
+ com.baeldung.jpa.defaultvalues.UserEntity
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/persistence-modules/java-jpa-2/src/test/resources/queryparams.sql b/persistence-modules/java-jpa/src/test/resources/queryparams.sql
similarity index 100%
rename from persistence-modules/java-jpa-2/src/test/resources/queryparams.sql
rename to persistence-modules/java-jpa/src/test/resources/queryparams.sql