diff --git a/persistence-modules/java-jpa-3/pom.xml b/persistence-modules/java-jpa-3/pom.xml
index f931cd90b8..1c3754c02a 100644
--- a/persistence-modules/java-jpa-3/pom.xml
+++ b/persistence-modules/java-jpa-3/pom.xml
@@ -68,6 +68,12 @@
${assertj.version}
test
+
+ junit
+ junit
+ ${junit.version}
+ test
+
diff --git a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/IdGeneration/User.java b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/IdGeneration/User.java
new file mode 100644
index 0000000000..88e742adce
--- /dev/null
+++ b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/IdGeneration/User.java
@@ -0,0 +1,41 @@
+package com.baeldung.jpa.IdGeneration;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+@Entity
+public class User {
+
+ @Id
+// @GeneratedValue(strategy = GenerationType.SEQUENCE)
+ @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;
+ }
+}
diff --git a/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/IdGeneration/UserService.java b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/IdGeneration/UserService.java
new file mode 100644
index 0000000000..9c34ef9bb4
--- /dev/null
+++ b/persistence-modules/java-jpa-3/src/main/java/com/baeldung/jpa/IdGeneration/UserService.java
@@ -0,0 +1,19 @@
+package com.baeldung.jpa.IdGeneration;
+
+import javax.persistence.EntityManager;
+import javax.transaction.Transactional;
+
+public class UserService {
+
+ EntityManager entityManager;
+
+ public UserService(EntityManager entityManager) {
+ this.entityManager = entityManager;
+ }
+
+ @Transactional
+ public long saveUser(User user){
+ entityManager.persist(user);
+ return user.getId();
+ }
+}
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 19ecae8491..bc41f35c01 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,4 +97,20 @@
+
+
+ org.hibernate.jpa.HibernatePersistenceProvider
+ com.baeldung.jpa.IdGeneration.User
+ true
+
+
+
+
+
+
+
+
+
+
+
diff --git a/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/IdGeneration/IdGenerationIntegrationTest.java b/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/IdGeneration/IdGenerationIntegrationTest.java
new file mode 100644
index 0000000000..941ad52344
--- /dev/null
+++ b/persistence-modules/java-jpa-3/src/test/java/com/baeldung/jpa/IdGeneration/IdGenerationIntegrationTest.java
@@ -0,0 +1,47 @@
+package com.baeldung.jpa.IdGeneration;
+
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import java.util.UUID;
+
+public class IdGenerationIntegrationTest {
+
+ private static EntityManager entityManager;
+ private static UserService service;
+
+ @BeforeClass
+ public static void setup() {
+ EntityManagerFactory factory = Persistence.createEntityManagerFactory("jpa-h2-id-generation");
+ entityManager = factory.createEntityManager();
+ service = new UserService(entityManager);
+ }
+
+ @Test
+ public void whenNewUserIsPersisted_thenEntityHasNoId() {
+ User user = new User();
+ user.setUsername("test");
+ user.setPassword(UUID.randomUUID().toString());
+
+ long index = service.saveUser(user);
+ Assert.assertEquals(0L, index);
+ }
+
+ @Test
+ public void whenTransactionIsControlled_thenEntityHasId() {
+ User user = new User();
+ user.setUsername("test");
+ user.setPassword(UUID.randomUUID().toString());
+
+ entityManager.getTransaction().begin();
+ long index = service.saveUser(user);
+ entityManager.getTransaction().commit();
+
+ Assert.assertEquals(2L, index);
+ }
+
+}