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); + } + +}