Line 0
Link Here
|
|
|
1 |
/******************************************************************************* |
2 |
* Copyright (c) 2011 Oracle. All rights reserved. |
3 |
* This program and the accompanying materials are made available under the |
4 |
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 |
5 |
* which accompanies this distribution. |
6 |
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html |
7 |
* and the Eclipse Distribution License is available at |
8 |
* http://www.eclipse.org/org/documents/edl-v10.php. |
9 |
* |
10 |
* Contributors: |
11 |
* 03/23/2011-2.3 Guy Pelletier |
12 |
* - 337323: Multi-tenant with shared schema support (part 1) |
13 |
* 04/01/2011-2.3 Guy Pelletier |
14 |
* - 337323: Multi-tenant with shared schema support (part 2) |
15 |
* 04/21/2011-2.3 Guy Pelletier |
16 |
* - 337323: Multi-tenant with shared schema support (part 5) |
17 |
******************************************************************************/ |
18 |
package org.eclipse.persistence.testing.tests.jpa.advanced.multitenant; |
19 |
|
20 |
import java.util.ArrayList; |
21 |
//import java.util.HashMap; |
22 |
import java.util.List; |
23 |
//import java.util.Map; |
24 |
|
25 |
import javax.persistence.EntityManager; |
26 |
//import javax.persistence.EntityManagerFactory; |
27 |
//import javax.persistence.NamedQuery; |
28 |
//import javax.persistence.Persistence; |
29 |
import javax.persistence.Query; |
30 |
|
31 |
import junit.framework.*; |
32 |
|
33 |
import org.eclipse.persistence.testing.framework.junit.JUnitTestCase; |
34 |
|
35 |
import org.eclipse.persistence.config.EntityManagerProperties; |
36 |
//import org.eclipse.persistence.config.PersistenceUnitProperties; |
37 |
import org.eclipse.persistence.testing.models.jpa.advanced.multitenant.AdvancedMultiTenantTableCreator; |
38 |
import org.eclipse.persistence.testing.models.jpa.advanced.multitenant.Boss; |
39 |
import org.eclipse.persistence.testing.models.jpa.advanced.multitenant.Capo; |
40 |
import org.eclipse.persistence.testing.models.jpa.advanced.multitenant.Contract; |
41 |
import org.eclipse.persistence.testing.models.jpa.advanced.multitenant.MafiaFamily; |
42 |
import org.eclipse.persistence.testing.models.jpa.advanced.multitenant.Mafioso; |
43 |
import org.eclipse.persistence.testing.models.jpa.advanced.multitenant.Soldier; |
44 |
import org.eclipse.persistence.testing.models.jpa.advanced.multitenant.Underboss; |
45 |
|
46 |
public class AdvancedMultiTenantSharedEMFJunitTest extends JUnitTestCase { |
47 |
public static final String MULTI_TENANT_PU = "MulitPU-1"; |
48 |
|
49 |
public static int family707; |
50 |
public static int family007; |
51 |
public static List<Integer> family707Mafiosos = new ArrayList<Integer>(); |
52 |
public static List<Integer> family707Contracts = new ArrayList<Integer>(); |
53 |
public static List<Integer> family007Mafiosos = new ArrayList<Integer>(); |
54 |
public static List<Integer> family007Contracts = new ArrayList<Integer>(); |
55 |
|
56 |
public AdvancedMultiTenantSharedEMFJunitTest() { |
57 |
super(); |
58 |
} |
59 |
|
60 |
public AdvancedMultiTenantSharedEMFJunitTest(String name) { |
61 |
super(name); |
62 |
setPuName(MULTI_TENANT_PU); |
63 |
} |
64 |
|
65 |
public void setUp() {} |
66 |
|
67 |
public static Test suite() { |
68 |
TestSuite suite = new TestSuite(); |
69 |
suite.setName("AdvancedMultiTenantSharedEMFJunitTest"); |
70 |
if (! JUnitTestCase.isJPA10()) { |
71 |
suite.addTest(new AdvancedMultiTenantSharedEMFJunitTest("testSetup")); |
72 |
|
73 |
suite.addTest(new AdvancedMultiTenantSharedEMFJunitTest("testCreateMafiaFamily707")); |
74 |
suite.addTest(new AdvancedMultiTenantSharedEMFJunitTest("testCreateMafiaFamily007")); |
75 |
suite.addTest(new AdvancedMultiTenantSharedEMFJunitTest("testValidateMafiaFamily707")); |
76 |
suite.addTest(new AdvancedMultiTenantSharedEMFJunitTest("testValidateMafiaFamily007")); |
77 |
suite.addTest(new AdvancedMultiTenantSharedEMFJunitTest("testValidateMafiaFamily707and007WithSameEM")); |
78 |
} |
79 |
return suite; |
80 |
} |
81 |
|
82 |
/** |
83 |
* The setup is done as a test, both to record its failure, and to allow execution in the server. |
84 |
*/ |
85 |
public void testSetup() { |
86 |
new AdvancedMultiTenantTableCreator().replaceTables(JUnitTestCase.getServerSession(MULTI_TENANT_PU)); |
87 |
} |
88 |
|
89 |
public void testCreateMafiaFamily707() { |
90 |
EntityManager em = createEntityManager(MULTI_TENANT_PU); |
91 |
try { |
92 |
beginTransaction(em); |
93 |
//on server side, you have to set the em properties after transaction begins |
94 |
em.setProperty("tenant.id", "707"); |
95 |
em.setProperty(EntityManagerProperties.MULTITENANT_PROPERTY_DEFAULT, "707"); |
96 |
|
97 |
MafiaFamily family = new MafiaFamily(); |
98 |
family.setName("Gonzo"); |
99 |
family.setRevenue(10000000.00); |
100 |
family.addTag("firstTag"); |
101 |
family.addTag("secondTag"); |
102 |
family.addTag("thirdTag"); |
103 |
|
104 |
Boss boss = new Boss(); |
105 |
boss.setFirstName("707"); |
106 |
boss.setLastName("Boss"); |
107 |
boss.setGender(Mafioso.Gender.Male); |
108 |
|
109 |
Underboss underboss = new Underboss(); |
110 |
underboss.setFirstName("Under"); |
111 |
underboss.setLastName("Boss"); |
112 |
underboss.setGender(Mafioso.Gender.Male); |
113 |
|
114 |
Capo capo1 = new Capo(); |
115 |
capo1.setFirstName("Capo"); |
116 |
capo1.setLastName("Giggaloo"); |
117 |
capo1.setGender(Mafioso.Gender.Female); |
118 |
|
119 |
Capo capo2 = new Capo(); |
120 |
capo2.setFirstName("Capo"); |
121 |
capo2.setLastName("CrazyGlue"); |
122 |
capo2.setGender(Mafioso.Gender.Male); |
123 |
|
124 |
Soldier soldier1 = new Soldier(); |
125 |
soldier1.setFirstName("Soldier"); |
126 |
soldier1.setLastName("One"); |
127 |
soldier1.setGender(Mafioso.Gender.Female); |
128 |
|
129 |
Soldier soldier2 = new Soldier(); |
130 |
soldier2.setFirstName("Soldier"); |
131 |
soldier2.setLastName("Two"); |
132 |
soldier2.setGender(Mafioso.Gender.Male); |
133 |
|
134 |
Soldier soldier3 = new Soldier(); |
135 |
soldier3.setFirstName("Soldier"); |
136 |
soldier3.setLastName("Three"); |
137 |
soldier3.setGender(Mafioso.Gender.Male); |
138 |
|
139 |
Soldier soldier4 = new Soldier(); |
140 |
soldier4.setFirstName("Soldier"); |
141 |
soldier4.setLastName("Four"); |
142 |
soldier4.setGender(Mafioso.Gender.Male); |
143 |
|
144 |
Soldier soldier5 = new Soldier(); |
145 |
soldier5.setFirstName("Soldier"); |
146 |
soldier5.setLastName("Four"); |
147 |
soldier5.setGender(Mafioso.Gender.Female); |
148 |
|
149 |
Contract contract1 = new Contract(); |
150 |
contract1.setDescription("Whack 007 family boss"); |
151 |
|
152 |
Contract contract2 = new Contract(); |
153 |
contract2.setDescription("Acquire fully-automatic guns"); |
154 |
|
155 |
Contract contract3 = new Contract(); |
156 |
contract3.setDescription("Steal some money"); |
157 |
|
158 |
// Populate the relationships. |
159 |
contract1.addSoldier(soldier1); |
160 |
contract1.addSoldier(soldier5); |
161 |
|
162 |
contract2.addSoldier(soldier1); |
163 |
contract2.addSoldier(soldier3); |
164 |
contract2.addSoldier(soldier5); |
165 |
|
166 |
contract3.addSoldier(soldier2); |
167 |
contract3.addSoldier(soldier3); |
168 |
contract3.addSoldier(soldier4); |
169 |
contract3.addSoldier(soldier5); |
170 |
|
171 |
boss.setUnderboss(underboss); |
172 |
|
173 |
capo1.setUnderboss(underboss); |
174 |
capo2.setUnderboss(underboss); |
175 |
|
176 |
capo1.addSoldier(soldier1); |
177 |
capo1.addSoldier(soldier2); |
178 |
|
179 |
capo2.addSoldier(soldier3); |
180 |
capo2.addSoldier(soldier4); |
181 |
capo2.addSoldier(soldier5); |
182 |
|
183 |
underboss.addCapo(capo1); |
184 |
underboss.addCapo(capo2); |
185 |
|
186 |
family.addMafioso(boss); |
187 |
family.addMafioso(underboss); |
188 |
|
189 |
family.addMafioso(capo1); |
190 |
family.addMafioso(capo2); |
191 |
|
192 |
family.addMafioso(soldier1); |
193 |
family.addMafioso(soldier2); |
194 |
family.addMafioso(soldier3); |
195 |
family.addMafioso(soldier4); |
196 |
family.addMafioso(soldier5); |
197 |
|
198 |
// Will cascade through the whole family. |
199 |
em.persist(family); |
200 |
// Store the ids to verify |
201 |
family707 = family.getId(); |
202 |
family707Mafiosos.add(boss.getId()); |
203 |
family707Mafiosos.add(underboss.getId()); |
204 |
family707Mafiosos.add(capo1.getId()); |
205 |
family707Mafiosos.add(capo2.getId()); |
206 |
family707Mafiosos.add(soldier1.getId()); |
207 |
family707Mafiosos.add(soldier2.getId()); |
208 |
family707Mafiosos.add(soldier3.getId()); |
209 |
family707Mafiosos.add(soldier4.getId()); |
210 |
family707Mafiosos.add(soldier5.getId()); |
211 |
family707Contracts.add(contract1.getId()); |
212 |
family707Contracts.add(contract2.getId()); |
213 |
family707Contracts.add(contract3.getId()); |
214 |
commitTransaction(em); |
215 |
} catch (RuntimeException e) { |
216 |
if (isTransactionActive(em)){ |
217 |
rollbackTransaction(em); |
218 |
} |
219 |
throw e; |
220 |
} finally { |
221 |
closeEntityManager(em); |
222 |
} |
223 |
} |
224 |
|
225 |
public void testCreateMafiaFamily007() { |
226 |
EntityManager em = createEntityManager(MULTI_TENANT_PU); |
227 |
try { |
228 |
beginTransaction(em); |
229 |
//on server side, you have to set the em properties after transaction begins |
230 |
em.setProperty("tenant.id", "007"); |
231 |
em.setProperty(EntityManagerProperties.MULTITENANT_PROPERTY_DEFAULT, "007"); |
232 |
|
233 |
MafiaFamily family = new MafiaFamily(); |
234 |
family.setName("Bond"); |
235 |
family.setRevenue(987654321.03); |
236 |
family.addTag("tag1"); |
237 |
family.addTag("tag2"); |
238 |
family.addTag("tag3"); |
239 |
family.addTag("tag4"); |
240 |
family.addTag("tag5"); |
241 |
|
242 |
Boss boss = new Boss(); |
243 |
boss.setFirstName("007"); |
244 |
boss.setLastName("Boss"); |
245 |
boss.setGender(Mafioso.Gender.Female); |
246 |
|
247 |
Underboss underboss = new Underboss(); |
248 |
underboss.setFirstName("Second"); |
249 |
underboss.setLastName("InCommand"); |
250 |
underboss.setGender(Mafioso.Gender.Female); |
251 |
|
252 |
Capo capo1 = new Capo(); |
253 |
capo1.setFirstName("Capo"); |
254 |
capo1.setLastName("Lubey"); |
255 |
capo1.setGender(Mafioso.Gender.Male); |
256 |
|
257 |
Capo capo2 = new Capo(); |
258 |
capo2.setFirstName("Capo"); |
259 |
capo2.setLastName("Greasy"); |
260 |
capo2.setGender(Mafioso.Gender.Female); |
261 |
|
262 |
Soldier soldier1 = new Soldier(); |
263 |
soldier1.setFirstName("First"); |
264 |
soldier1.setLastName("Grunt"); |
265 |
soldier1.setGender(Mafioso.Gender.Male); |
266 |
|
267 |
Soldier soldier2 = new Soldier(); |
268 |
soldier2.setFirstName("Second"); |
269 |
soldier2.setLastName("Grunt"); |
270 |
soldier2.setGender(Mafioso.Gender.Female); |
271 |
|
272 |
Soldier soldier3 = new Soldier(); |
273 |
soldier3.setFirstName("Third"); |
274 |
soldier3.setLastName("Grunt"); |
275 |
soldier3.setGender(Mafioso.Gender.Female); |
276 |
|
277 |
Soldier soldier4 = new Soldier(); |
278 |
soldier4.setFirstName("Fourth"); |
279 |
soldier4.setLastName("Grunt"); |
280 |
soldier4.setGender(Mafioso.Gender.Female); |
281 |
|
282 |
Soldier soldier5 = new Soldier(); |
283 |
soldier5.setFirstName("Fifth"); |
284 |
soldier5.setLastName("Grunt"); |
285 |
soldier5.setGender(Mafioso.Gender.Male); |
286 |
|
287 |
Soldier soldier6 = new Soldier(); |
288 |
soldier6.setFirstName("Sixth"); |
289 |
soldier6.setLastName("Grunt"); |
290 |
soldier6.setGender(Mafioso.Gender.Male); |
291 |
|
292 |
Soldier soldier7 = new Soldier(); |
293 |
soldier7.setFirstName("Seventh"); |
294 |
soldier7.setLastName("Grunt"); |
295 |
soldier7.setGender(Mafioso.Gender.Male); |
296 |
|
297 |
Contract contract1 = new Contract(); |
298 |
contract1.setDescription("Whack 707 family boss"); |
299 |
|
300 |
Contract contract2 = new Contract(); |
301 |
contract2.setDescription("Acquire semi-automatic guns"); |
302 |
|
303 |
Contract contract3 = new Contract(); |
304 |
contract3.setDescription("Set up new financing deals"); |
305 |
|
306 |
// Populate the relationships. |
307 |
contract1.addSoldier(soldier1); |
308 |
contract1.addSoldier(soldier5); |
309 |
|
310 |
contract2.addSoldier(soldier1); |
311 |
contract2.addSoldier(soldier3); |
312 |
contract2.addSoldier(soldier7); |
313 |
|
314 |
contract3.addSoldier(soldier2); |
315 |
contract3.addSoldier(soldier3); |
316 |
contract3.addSoldier(soldier4); |
317 |
contract3.addSoldier(soldier5); |
318 |
|
319 |
boss.setUnderboss(underboss); |
320 |
|
321 |
capo1.setUnderboss(underboss); |
322 |
capo2.setUnderboss(underboss); |
323 |
|
324 |
capo1.addSoldier(soldier1); |
325 |
capo1.addSoldier(soldier2); |
326 |
|
327 |
capo2.addSoldier(soldier3); |
328 |
capo2.addSoldier(soldier4); |
329 |
capo2.addSoldier(soldier5); |
330 |
capo2.addSoldier(soldier6); |
331 |
capo2.addSoldier(soldier7); |
332 |
|
333 |
underboss.addCapo(capo1); |
334 |
underboss.addCapo(capo2); |
335 |
|
336 |
family.addMafioso(boss); |
337 |
family.addMafioso(underboss); |
338 |
|
339 |
family.addMafioso(capo1); |
340 |
family.addMafioso(capo2); |
341 |
|
342 |
family.addMafioso(soldier1); |
343 |
family.addMafioso(soldier2); |
344 |
family.addMafioso(soldier3); |
345 |
family.addMafioso(soldier4); |
346 |
family.addMafioso(soldier5); |
347 |
family.addMafioso(soldier6); |
348 |
family.addMafioso(soldier7); |
349 |
|
350 |
// Will cascade through the whole family. |
351 |
em.persist(family); |
352 |
family007 = family.getId(); |
353 |
family007Mafiosos.add(boss.getId()); |
354 |
family007Mafiosos.add(underboss.getId()); |
355 |
family007Mafiosos.add(capo1.getId()); |
356 |
family007Mafiosos.add(capo2.getId()); |
357 |
family007Mafiosos.add(soldier1.getId()); |
358 |
family007Mafiosos.add(soldier2.getId()); |
359 |
family007Mafiosos.add(soldier3.getId()); |
360 |
family007Mafiosos.add(soldier4.getId()); |
361 |
family007Mafiosos.add(soldier5.getId()); |
362 |
family007Mafiosos.add(soldier6.getId()); |
363 |
family007Mafiosos.add(soldier7.getId()); |
364 |
family007Contracts.add(contract1.getId()); |
365 |
family007Contracts.add(contract2.getId()); |
366 |
family007Contracts.add(contract3.getId()); |
367 |
commitTransaction(em); |
368 |
} catch (RuntimeException e) { |
369 |
if (isTransactionActive(em)){ |
370 |
rollbackTransaction(em); |
371 |
} |
372 |
throw e; |
373 |
} finally { |
374 |
closeEntityManager(em); |
375 |
} |
376 |
} |
377 |
|
378 |
public void testValidateMafiaFamily707() { |
379 |
EntityManager em = createEntityManager(MULTI_TENANT_PU); |
380 |
try { |
381 |
validateMafiaFamily707(em); |
382 |
} catch (RuntimeException e) { |
383 |
if (isTransactionActive(em)){ |
384 |
rollbackTransaction(em); |
385 |
} |
386 |
throw e; |
387 |
} finally { |
388 |
closeEntityManager(em); |
389 |
} |
390 |
} |
391 |
|
392 |
public void testValidateMafiaFamily007() { |
393 |
EntityManager em = createEntityManager(MULTI_TENANT_PU); |
394 |
try { |
395 |
validateMafiaFamily007(em); |
396 |
} catch (RuntimeException e) { |
397 |
if (isTransactionActive(em)){ |
398 |
rollbackTransaction(em); |
399 |
} |
400 |
throw e; |
401 |
} finally { |
402 |
closeEntityManager(em); |
403 |
} |
404 |
} |
405 |
|
406 |
public void testValidateMafiaFamily707and007WithSameEM() { |
407 |
EntityManager em = createEntityManager(MULTI_TENANT_PU); |
408 |
try { |
409 |
validateMafiaFamily707(em); |
410 |
validateMafiaFamily007(em); |
411 |
} catch (RuntimeException e) { |
412 |
if (isTransactionActive(em)){ |
413 |
rollbackTransaction(em); |
414 |
} |
415 |
throw e; |
416 |
} finally { |
417 |
closeEntityManager(em); |
418 |
} |
419 |
} |
420 |
|
421 |
protected void validateMafiaFamily007(EntityManager em) { |
422 |
clearCache(MULTI_TENANT_PU); |
423 |
em.clear(); |
424 |
|
425 |
beginTransaction(em); |
426 |
|
427 |
em.setProperty("tenant.id", "007"); |
428 |
em.setProperty(EntityManagerProperties.MULTITENANT_PROPERTY_DEFAULT, "007"); |
429 |
|
430 |
MafiaFamily family = em.find(MafiaFamily.class, family007); |
431 |
assertNotNull("The Mafia Family with id: " + family007 + ", was not found", family); |
432 |
assertTrue("The Mafia Family had an incorrect number of tags [" + family.getTags().size() + "], expected [5]", family.getTags().size() == 5); |
433 |
assertNull("The Mafia Family with id: " + family707 + ", was found (when it should not have been)", em.find(MafiaFamily.class, family707)); |
434 |
//for multipersistence units tests, we have seperate the test suite based on persistence unit, validateMafiaFamily007 is running ahead of testCreateMafiaFamily123 |
435 |
//so family123 won't have value at this moment |
436 |
//assertNull("The Mafia Family with id: " + family123 + ", was found (when it should not have been)", em.find(MafiaFamily.class, family123)); |
437 |
|
438 |
// following line will fail, Guy is investigating |
439 |
assertFalse("No mafiosos part of 007 family", family.getMafiosos().isEmpty()); |
440 |
|
441 |
// See if we can find any members of the other family. |
442 |
for (Integer id : family707Mafiosos) { |
443 |
assertNull("Found family 707 mafioso.", em.find(Mafioso.class, id)); |
444 |
} |
445 |
|
446 |
// Query directly for the boss from the other family. |
447 |
Boss otherBoss = em.find(Boss.class, family707Mafiosos.get(0)); |
448 |
assertNull("Found family 707 boss.", otherBoss); |
449 |
|
450 |
// See if we can find any contracts of the other family. |
451 |
for (Integer id : family707Contracts) { |
452 |
assertNull("Found family 707 contract.", em.find(Contract.class, id)); |
453 |
} |
454 |
|
455 |
// Read and validate our contracts |
456 |
List<Contract> contracts = em.createNamedQuery("FindAllContracts").getResultList(); |
457 |
assertTrue("Incorrect number of contracts were returned [" + contracts.size() + "], expected[3]", contracts.size() == 3); |
458 |
|
459 |
for (Contract contract : contracts) { |
460 |
assertFalse("Contract description was voided.", contract.getDescription().equals("voided")); |
461 |
} |
462 |
|
463 |
// Try a select named query |
464 |
List families = em.createNamedQuery("findJPQLMafiaFamilies").getResultList(); |
465 |
assertTrue("Incorrect number of families were returned [" + families.size() + "], expected [1]", families.size() == 1); |
466 |
// Find our boss and make sure his name has not been compromised from the 707 family. |
467 |
Boss boss = em.find(Boss.class, family007Mafiosos.get(0)); |
468 |
assertFalse("The Boss name has been compromised", boss.getFirstName().equals("Compromised")); |
469 |
|
470 |
commitTransaction(em); |
471 |
} |
472 |
|
473 |
protected void validateMafiaFamily707(EntityManager em) { |
474 |
clearCache(MULTI_TENANT_PU); |
475 |
em.clear(); |
476 |
|
477 |
beginTransaction(em); |
478 |
|
479 |
em.setProperty("tenant.id", "707"); |
480 |
em.setProperty(EntityManagerProperties.MULTITENANT_PROPERTY_DEFAULT, "707"); |
481 |
|
482 |
MafiaFamily family = em.find(MafiaFamily.class, family707); |
483 |
assertNotNull("The Mafia Family with id: " + family707 + ", was not found", family); |
484 |
assertTrue("The Mafia Family had an incorrect number of tags [" + family.getTags().size() + "], expected [3]", family.getTags().size() == 3); |
485 |
assertNull("The Mafia Family with id: " + family007 + ", was found (when it should not have been)", em.find(MafiaFamily.class, family007)); |
486 |
//for multipersistence units tests, we have seperate the test suite based on persistence unit, validateMafiaFamily007 is running ahead of testCreateMafiaFamily123 |
487 |
//so family123 won't have value at this moment |
488 |
//assertNull("The Mafia Family with id: " + family123 + ", was found (when it should not have been)", em.find(MafiaFamily.class, family123)); |
489 |
assertFalse("No mafiosos part of 707 family", family.getMafiosos().isEmpty()); |
490 |
|
491 |
// See if we can find any members of the other family. |
492 |
for (Integer id : family007Mafiosos) { |
493 |
assertNull("Found family 007 mafioso.", em.find(Mafioso.class, id)); |
494 |
} |
495 |
|
496 |
// Query directly for the boss from the other family. |
497 |
Boss otherBoss = em.find(Boss.class, family007Mafiosos.get(0)); |
498 |
assertNull("Found family 007 boss.", otherBoss); |
499 |
// See if we can find any contracts of the other family. |
500 |
for (Integer id : family007Contracts) { |
501 |
assertNull("Found family 007 contract.", em.find(Contract.class, id)); |
502 |
} |
503 |
|
504 |
// Update all our contract descriptions to be 'voided' |
505 |
getServerSession(MULTI_TENANT_PU).setLogLevel(0); |
506 |
em.createNamedQuery("UpdateAllContractDescriptions").executeUpdate(); |
507 |
|
508 |
// Read and validate the contracts |
509 |
List<Contract> contracts = em.createNamedQuery("FindAllContracts").getResultList(); |
510 |
|
511 |
assertTrue("Incorrect number of contracts were returned [" + contracts.size() + "], expected[3]", contracts.size() == 3); |
512 |
|
513 |
for (Contract contract : contracts) { |
514 |
assertTrue("Contract description was not voided.", contract.getDescription().equals("voided")); |
515 |
} |
516 |
|
517 |
// See how many soldiers are returned from a jpql query |
518 |
List soldiers = em.createQuery("SELECT s from Soldier s").getResultList(); |
519 |
|
520 |
assertTrue("Incorrect number of soldiers were returned [" + soldiers.size() + "], expected [5]", soldiers.size() == 5); |
521 |
|
522 |
// We know what the boss's id is for the 007 family to try to update him from the 707 pu. |
523 |
// The 007 family is validated after this test. |
524 |
Query query = em.createNamedQuery("UpdateBossName"); |
525 |
query.setParameter("name", "Compromised"); |
526 |
query.setParameter("id", family007Mafiosos.get(0)); |
527 |
query.executeUpdate(); |
528 |
|
529 |
commitTransaction(em); |
530 |
} |
531 |
} |