1 package ejava.examples.orm.rel;
2
3 import static org.junit.Assert.*;
4
5 import java.util.Collection;
6
7 import org.junit.Test;
8
9 import ejava.examples.orm.rel.annotated.Inventory;
10 import ejava.examples.orm.rel.annotated.Media;
11
12
13
14
15
16
17
18 public class OneToManyJoinTableTest extends DemoBase {
19
20 @Test
21 public void testOneToManyJoinCreate() {
22 logger.info("testLinkCreate");
23 ejava.examples.orm.rel.annotated.Inventory inventory
24 = new Inventory();
25 inventory.setName("testLinkCreate");
26
27 em.persist(inventory);
28
29 for(int i=0; i<5; i++) {
30 ejava.examples.orm.rel.annotated.Media media = new Media();
31 em.persist(media);
32 logger.info("created media:" + media);
33 inventory.getMedia().add(media);
34 }
35 em.flush();
36 logger.info("created inventory:{}", inventory);
37 }
38
39 @Test
40 public void testOneToManyJoinFind() {
41 logger.info("testOneToManyJoinFind()");
42
43 ejava.examples.orm.rel.annotated.Inventory inventory1
44 = new Inventory();
45 inventory1.setName("testLinkFind");
46
47 em.persist(inventory1);
48
49 for(int i=0; i<5; i++) {
50 ejava.examples.orm.rel.annotated.Media media = new Media();
51
52 logger.info("created media:" + media);
53 inventory1.getMedia().add(media);
54 }
55 logger.info("creating inventory:{}", inventory1);
56
57 em.flush();
58 em.clear();
59 em.getTransaction().commit();
60 em.getTransaction().begin();
61
62 assertFalse("inventory still managed", em.contains(inventory1));
63
64 Inventory inventory2 = em.find(Inventory.class, inventory1.getId());
65 logger.info("found inventory:{}", inventory2);
66
67 assertNotNull("inventory not found", inventory2);
68 assertNotSame(inventory1, inventory2);
69 assertTrue("inventory name unexpected:" + inventory2.getName(),
70 inventory1.getName().equals(inventory2.getName()));
71 assertNotNull("media null", inventory2.getMedia());
72 assertEquals("unexpected media count:" + inventory2.getMedia().size(),
73 inventory1.getMedia().size(), inventory2.getMedia().size());
74 findMedia(inventory2.getMedia(), true);
75 }
76
77 @Test
78 public void testOneToManyJoinRemove() {
79 logger.info("testOneToManyJoinRemove");
80 ejava.examples.orm.rel.annotated.Inventory inventory1
81 = new Inventory();
82 inventory1.setName("testRemove");
83
84 em.persist(inventory1);
85
86 for(int i=0; i<5; i++) {
87 ejava.examples.orm.rel.annotated.Media media = new Media();
88 em.persist(media);
89 logger.info("created media:{}", media);
90 inventory1.getMedia().add(media);
91 }
92 logger.info("creating inventory:{}", inventory1);
93
94 em.flush();
95 em.clear();
96 em.getTransaction().commit();
97 em.getTransaction().begin();
98
99 assertFalse("inventory still managed", em.contains(inventory1));
100 Inventory inventory2 = em.find(Inventory.class, inventory1.getId());
101 assertNotNull("inventory not found", inventory2);
102 findMedia(inventory2.getMedia(), true);
103 em.remove(inventory2);
104 logger.info("removed inventory:{}", inventory2);
105 assertTrue("inventory not removed",
106 em.createQuery("select object(i) from Inventory as i where i.id=" +
107 inventory2.getId()).getResultList().size() == 0);
108
109 findMedia(inventory2.getMedia(), false);
110
111 }
112
113 private void findMedia(Collection<Media> media, boolean exist) {
114 logger.info("looking for media objects:{}", media.size());
115 for(Media m : media) {
116 if (exist) {
117 assertTrue("media not found:" + m.getId(),
118 em.find(Media.class, m.getId()) != null);
119 logger.info("found media:{}", m.getId());
120 }
121 else {
122 assertFalse("media not found:" + m.getId(),
123 em.find(Media.class, m.getId()) != null);
124 logger.info("media not found:{}", m.getId());
125 }
126 }
127 }
128 }