Skip to content

Commit e984ba6

Browse files
authored
Merge pull request eugenp#8246 from kumar-devender/master
Persistence context example
2 parents 5df99fa + 150f545 commit e984ba6

File tree

5 files changed

+204
-0
lines changed

5 files changed

+204
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.baeldung.persistencecontext;
2+
3+
import org.springframework.boot.SpringApplication;
4+
import org.springframework.boot.autoconfigure.SpringBootApplication;
5+
import org.springframework.context.annotation.ComponentScan;
6+
7+
@SpringBootApplication
8+
@ComponentScan(basePackages="com.baeldung.persistencecontext")
9+
public class PersistenceContextDemoApplication {
10+
public static void main(String[] args) {
11+
SpringApplication.run(PersistenceContextDemoApplication.class, args);
12+
}
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.baeldung.persistencecontext.entity;
2+
3+
import javax.persistence.Entity;
4+
import javax.persistence.Id;
5+
6+
@Entity
7+
public class User {
8+
9+
@Id
10+
private Long id;
11+
private String name;
12+
private String role;
13+
14+
public User() {
15+
16+
}
17+
18+
public User(Long id, String name, String role) {
19+
this.id = id;
20+
this.name = name;
21+
this.role = role;
22+
}
23+
24+
public Long getId() {
25+
return id;
26+
}
27+
28+
public String getName() {
29+
return name;
30+
}
31+
32+
public String getRole() {
33+
return role;
34+
}
35+
36+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.baeldung.persistencecontext.service;
2+
3+
import javax.persistence.EntityManager;
4+
import javax.persistence.PersistenceContext;
5+
import javax.persistence.PersistenceContextType;
6+
import javax.transaction.Transactional;
7+
8+
import org.springframework.stereotype.Component;
9+
10+
import com.baeldung.persistencecontext.entity.User;
11+
12+
@Component
13+
public class ExtendedPersistenceContextUserService {
14+
15+
@PersistenceContext(type = PersistenceContextType.EXTENDED)
16+
private EntityManager entityManager;
17+
18+
@Transactional
19+
public User insertWithTransaction(User user) {
20+
entityManager.persist(user);
21+
return user;
22+
}
23+
24+
public User insertWithoutTransaction(User user) {
25+
entityManager.persist(user);
26+
return user;
27+
}
28+
29+
public User find(long id) {
30+
User user = entityManager.find(User.class, id);
31+
return user;
32+
}
33+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package com.baeldung.persistencecontext.service;
2+
3+
4+
import javax.persistence.EntityManager;
5+
import javax.persistence.PersistenceContext;
6+
import javax.transaction.Transactional;
7+
8+
import org.springframework.stereotype.Component;
9+
10+
import com.baeldung.persistencecontext.entity.User;
11+
12+
@Component
13+
public class TransctionPersistenceContextUserService {
14+
15+
@PersistenceContext
16+
private EntityManager entityManager;
17+
18+
@Transactional
19+
public User insertWithTransaction(User user) {
20+
entityManager.persist(user);
21+
return user;
22+
}
23+
24+
public User insertWithoutTransaction(User user) {
25+
entityManager.persist(user);
26+
return user;
27+
}
28+
29+
public User find(long id) {
30+
return entityManager.find(User.class, id);
31+
}
32+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package com.baeldung.persistencecontext;
2+
3+
import com.baeldung.persistencecontext.entity.User;
4+
import com.baeldung.persistencecontext.service.ExtendedPersistenceContextUserService;
5+
import com.baeldung.persistencecontext.service.TransctionPersistenceContextUserService;
6+
7+
import javax.persistence.EntityExistsException;
8+
import javax.persistence.TransactionRequiredException;
9+
10+
import org.junit.Test;
11+
import org.junit.runner.RunWith;
12+
import org.springframework.beans.factory.annotation.Autowired;
13+
import org.springframework.boot.test.context.SpringBootTest;
14+
import org.springframework.test.context.junit4.SpringRunner;
15+
16+
import static org.junit.Assert.assertNotNull;
17+
import static org.junit.Assert.assertNull;
18+
19+
@RunWith(SpringRunner.class)
20+
@SpringBootTest(classes = com.baeldung.persistencecontext.PersistenceContextDemoApplication.class)
21+
public class PersistenceContextIntegrationTest {
22+
23+
@Autowired
24+
private TransctionPersistenceContextUserService transctionPersistenceContext;
25+
@Autowired
26+
private ExtendedPersistenceContextUserService extendedPersistenceContext;
27+
28+
@Test
29+
public void testThatWhenUserSavedWithTransctionPersistenceContextThenUserShouldGetSavedInDB() {
30+
User user = new User(121L, "Devender", "admin");
31+
transctionPersistenceContext.insertWithTransaction(user);
32+
33+
User userFromTransctionPersistenceContext = transctionPersistenceContext.find(user.getId());
34+
assertNotNull(userFromTransctionPersistenceContext);
35+
36+
User userFromExtendedPersistenceContext = extendedPersistenceContext.find(user.getId());
37+
assertNotNull(userFromExtendedPersistenceContext);
38+
}
39+
40+
@Test(expected = TransactionRequiredException.class)
41+
public void testThatUserSaveWithoutTransactionThrowException() {
42+
User user = new User(122L, "Devender", "admin");
43+
transctionPersistenceContext.insertWithoutTransaction(user);
44+
}
45+
46+
@Test
47+
public void testThatWhenUserSavedWithExtendedPersistenceContextWithoutTransactionThenUserShouldGetCached() {
48+
User user = new User(123L, "Devender", "admin");
49+
extendedPersistenceContext.insertWithoutTransaction(user);
50+
51+
User userFromExtendedPersistenceContext = extendedPersistenceContext.find(user.getId());
52+
assertNotNull(userFromExtendedPersistenceContext);
53+
54+
User userFromTransctionPersistenceContext = transctionPersistenceContext.find(user.getId());
55+
assertNull(userFromTransctionPersistenceContext);
56+
}
57+
58+
@Test(expected = EntityExistsException.class)
59+
public void testThatPersistUserWithSameIdentifierThrowException() {
60+
User user1 = new User(126L, "Devender", "admin");
61+
User user2 = new User(126L, "Devender", "admin");
62+
extendedPersistenceContext.insertWithoutTransaction(user1);
63+
extendedPersistenceContext.insertWithoutTransaction(user2);
64+
}
65+
66+
@Test
67+
public void testThatWhenUserSavedWithExtendedPersistenceContextWithTransactionThenUserShouldSaveEntityIntoDB() {
68+
User user = new User(127L, "Devender", "admin");
69+
extendedPersistenceContext.insertWithTransaction(user);
70+
71+
User userFromDB = transctionPersistenceContext.find(user.getId());
72+
assertNotNull(userFromDB);
73+
}
74+
75+
@Test
76+
public void testThatWhenUserSavedWithExtendedPersistenceContextWithTransactionThenUserShouldFlushCachedEntityIntoDB() {
77+
User user1 = new User(124L, "Devender", "admin");
78+
extendedPersistenceContext.insertWithoutTransaction(user1);
79+
80+
User user2 = new User(125L, "Devender", "admin");
81+
extendedPersistenceContext.insertWithTransaction(user2);
82+
83+
User user1FromTransctionPersistenceContext = transctionPersistenceContext.find(user1.getId());
84+
assertNotNull(user1FromTransctionPersistenceContext);
85+
86+
User user2FromTransctionPersistenceContext = transctionPersistenceContext.find(user2.getId());
87+
assertNotNull(user2FromTransctionPersistenceContext);
88+
}
89+
90+
}

0 commit comments

Comments
 (0)