Merge pull request #8246 from kumar-devender/master

Persistence context example
This commit is contained in:
Sam Millington 2019-11-25 10:07:36 +00:00 committed by GitHub
commit e827db3db2
5 changed files with 204 additions and 0 deletions

View File

@ -0,0 +1,13 @@
package com.baeldung.persistencecontext;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ComponentScan(basePackages="com.baeldung.persistencecontext")
public class PersistenceContextDemoApplication {
public static void main(String[] args) {
SpringApplication.run(PersistenceContextDemoApplication.class, args);
}
}

View File

@ -0,0 +1,36 @@
package com.baeldung.persistencecontext.entity;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class User {
@Id
private Long id;
private String name;
private String role;
public User() {
}
public User(Long id, String name, String role) {
this.id = id;
this.name = name;
this.role = role;
}
public Long getId() {
return id;
}
public String getName() {
return name;
}
public String getRole() {
return role;
}
}

View File

@ -0,0 +1,33 @@
package com.baeldung.persistencecontext.service;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceContextType;
import javax.transaction.Transactional;
import org.springframework.stereotype.Component;
import com.baeldung.persistencecontext.entity.User;
@Component
public class ExtendedPersistenceContextUserService {
@PersistenceContext(type = PersistenceContextType.EXTENDED)
private EntityManager entityManager;
@Transactional
public User insertWithTransaction(User user) {
entityManager.persist(user);
return user;
}
public User insertWithoutTransaction(User user) {
entityManager.persist(user);
return user;
}
public User find(long id) {
User user = entityManager.find(User.class, id);
return user;
}
}

View File

@ -0,0 +1,32 @@
package com.baeldung.persistencecontext.service;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.transaction.Transactional;
import org.springframework.stereotype.Component;
import com.baeldung.persistencecontext.entity.User;
@Component
public class TransctionPersistenceContextUserService {
@PersistenceContext
private EntityManager entityManager;
@Transactional
public User insertWithTransaction(User user) {
entityManager.persist(user);
return user;
}
public User insertWithoutTransaction(User user) {
entityManager.persist(user);
return user;
}
public User find(long id) {
return entityManager.find(User.class, id);
}
}

View File

@ -0,0 +1,90 @@
package com.baeldung.persistencecontext;
import com.baeldung.persistencecontext.entity.User;
import com.baeldung.persistencecontext.service.ExtendedPersistenceContextUserService;
import com.baeldung.persistencecontext.service.TransctionPersistenceContextUserService;
import javax.persistence.EntityExistsException;
import javax.persistence.TransactionRequiredException;
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.test.context.junit4.SpringRunner;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = com.baeldung.persistencecontext.PersistenceContextDemoApplication.class)
public class PersistenceContextIntegrationTest {
@Autowired
private TransctionPersistenceContextUserService transctionPersistenceContext;
@Autowired
private ExtendedPersistenceContextUserService extendedPersistenceContext;
@Test
public void testThatWhenUserSavedWithTransctionPersistenceContextThenUserShouldGetSavedInDB() {
User user = new User(121L, "Devender", "admin");
transctionPersistenceContext.insertWithTransaction(user);
User userFromTransctionPersistenceContext = transctionPersistenceContext.find(user.getId());
assertNotNull(userFromTransctionPersistenceContext);
User userFromExtendedPersistenceContext = extendedPersistenceContext.find(user.getId());
assertNotNull(userFromExtendedPersistenceContext);
}
@Test(expected = TransactionRequiredException.class)
public void testThatUserSaveWithoutTransactionThrowException() {
User user = new User(122L, "Devender", "admin");
transctionPersistenceContext.insertWithoutTransaction(user);
}
@Test
public void testThatWhenUserSavedWithExtendedPersistenceContextWithoutTransactionThenUserShouldGetCached() {
User user = new User(123L, "Devender", "admin");
extendedPersistenceContext.insertWithoutTransaction(user);
User userFromExtendedPersistenceContext = extendedPersistenceContext.find(user.getId());
assertNotNull(userFromExtendedPersistenceContext);
User userFromTransctionPersistenceContext = transctionPersistenceContext.find(user.getId());
assertNull(userFromTransctionPersistenceContext);
}
@Test(expected = EntityExistsException.class)
public void testThatPersistUserWithSameIdentifierThrowException() {
User user1 = new User(126L, "Devender", "admin");
User user2 = new User(126L, "Devender", "admin");
extendedPersistenceContext.insertWithoutTransaction(user1);
extendedPersistenceContext.insertWithoutTransaction(user2);
}
@Test
public void testThatWhenUserSavedWithExtendedPersistenceContextWithTransactionThenUserShouldSaveEntityIntoDB() {
User user = new User(127L, "Devender", "admin");
extendedPersistenceContext.insertWithTransaction(user);
User userFromDB = transctionPersistenceContext.find(user.getId());
assertNotNull(userFromDB);
}
@Test
public void testThatWhenUserSavedWithExtendedPersistenceContextWithTransactionThenUserShouldFlushCachedEntityIntoDB() {
User user1 = new User(124L, "Devender", "admin");
extendedPersistenceContext.insertWithoutTransaction(user1);
User user2 = new User(125L, "Devender", "admin");
extendedPersistenceContext.insertWithTransaction(user2);
User user1FromTransctionPersistenceContext = transctionPersistenceContext.find(user1.getId());
assertNotNull(user1FromTransctionPersistenceContext);
User user2FromTransctionPersistenceContext = transctionPersistenceContext.find(user2.getId());
assertNotNull(user2FromTransctionPersistenceContext);
}
}