diff --git a/persistence-modules/pom.xml b/persistence-modules/pom.xml
index f059ec449a..e4363cce9c 100644
--- a/persistence-modules/pom.xml
+++ b/persistence-modules/pom.xml
@@ -80,6 +80,7 @@
spring-data-geode
spring-data-jpa-annotations
+ spring-data-jpa-annotations-2
spring-data-jpa-crud
spring-data-jpa-crud-2
spring-data-jpa-enterprise
diff --git a/persistence-modules/spring-data-jpa-annotations-2/pom.xml b/persistence-modules/spring-data-jpa-annotations-2/pom.xml
new file mode 100644
index 0000000000..306d2ed172
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-annotations-2/pom.xml
@@ -0,0 +1,34 @@
+
+
+ 4.0.0
+ spring-data-jpa-annotations-2
+ spring-data-jpa-annotations-2
+
+
+ com.baeldung
+ parent-boot-2
+ 0.0.1-SNAPSHOT
+ ../../parent-boot-2
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ com.h2database
+ h2
+
+
+ jakarta.persistence
+ jakarta.persistence-api
+
+
+
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa-annotations-2/src/main/java/com/baeldung/datajpatest/User.java b/persistence-modules/spring-data-jpa-annotations-2/src/main/java/com/baeldung/datajpatest/User.java
new file mode 100644
index 0000000000..23b9273c82
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-annotations-2/src/main/java/com/baeldung/datajpatest/User.java
@@ -0,0 +1,42 @@
+package com.baeldung.datajpatest;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "app_user")
+public class User {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+ private String username;
+ private String password;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+}
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa-annotations-2/src/main/java/com/baeldung/datajpatest/UserApplication.java b/persistence-modules/spring-data-jpa-annotations-2/src/main/java/com/baeldung/datajpatest/UserApplication.java
new file mode 100644
index 0000000000..b58c7b2339
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-annotations-2/src/main/java/com/baeldung/datajpatest/UserApplication.java
@@ -0,0 +1,12 @@
+package com.baeldung.datajpatest;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class UserApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(UserApplication.class);
+ }
+}
diff --git a/persistence-modules/spring-data-jpa-annotations-2/src/main/java/com/baeldung/datajpatest/UserRepository.java b/persistence-modules/spring-data-jpa-annotations-2/src/main/java/com/baeldung/datajpatest/UserRepository.java
new file mode 100644
index 0000000000..3393081203
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-annotations-2/src/main/java/com/baeldung/datajpatest/UserRepository.java
@@ -0,0 +1,8 @@
+package com.baeldung.datajpatest;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface UserRepository extends JpaRepository {
+
+ User findByUsername(String username);
+}
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa-annotations-2/src/test/java/com/baeldung/datajpatest/UserRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-annotations-2/src/test/java/com/baeldung/datajpatest/UserRepositoryIntegrationTest.java
new file mode 100644
index 0000000000..9c933c8202
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-annotations-2/src/test/java/com/baeldung/datajpatest/UserRepositoryIntegrationTest.java
@@ -0,0 +1,68 @@
+package com.baeldung.datajpatest;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+import org.junit.After;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
+
+@DataJpaTest
+public class UserRepositoryIntegrationTest {
+
+ @Autowired
+ private UserRepository userRepository;
+
+ private User testUser;
+
+ @BeforeEach
+ public void setUp() {
+ // Initialize test data before each test method test
+ testUser = new User();
+ testUser.setUsername("testuser");
+ testUser.setPassword("password");
+ userRepository.save(testUser);
+ }
+
+ @After
+ public void tearDown() {
+ // Release test data after each test method
+ userRepository.delete(testUser);
+ }
+
+ @Test
+ void givenUser_whenSaved_thenCanBeFoundById() {
+ // Verify that the user has been saved successfully
+ User savedUser = userRepository.findById(testUser.getId())
+ .orElse(null);
+
+ assertNotNull(savedUser);
+ assertEquals(testUser.getUsername(), savedUser.getUsername());
+ assertEquals(testUser.getPassword(), savedUser.getPassword());
+ }
+
+ @Test
+ void givenUser_whenUpdated_thenCanBeFoundByIdWithUpdatedData() {
+ testUser.setUsername("updatedUsername");
+ userRepository.save(testUser);
+
+ User updatedUser = userRepository.findById(testUser.getId())
+ .orElse(null);
+
+ assertNotNull(updatedUser);
+ assertEquals("updatedUsername", updatedUser.getUsername());
+ }
+
+ @Test
+ void givenUser_whenFindByUsernameCalled_thenUserIsFound() {
+ User foundUser = userRepository.findByUsername("testuser");
+
+ assertNotNull(foundUser);
+ assertEquals("testuser", foundUser.getUsername());
+ }
+}
\ No newline at end of file