Source code: org/hibernate/test/manytomany/ManyToManyTest.java
1 //$Id: ManyToManyTest.java 7085 2005-06-08 17:59:47Z oneovthafew $
2 package org.hibernate.test.manytomany;
3
4 import junit.framework.Test;
5 import junit.framework.TestSuite;
6
7 import org.hibernate.FetchMode;
8 import org.hibernate.Hibernate;
9 import org.hibernate.Session;
10 import org.hibernate.Transaction;
11 import org.hibernate.cfg.Configuration;
12 import org.hibernate.cfg.Environment;
13 import org.hibernate.test.TestCase;
14
15 /**
16 * @author Gavin King
17 */
18 public class ManyToManyTest extends TestCase {
19
20 public ManyToManyTest(String str) {
21 super(str);
22 }
23
24 public void testManyToManyWithFormula() {
25 Session s = openSession();
26 Transaction t = s.beginTransaction();
27 User gavin = new User("gavin", "jboss");
28 Group seam = new Group("seam", "jboss");
29 Group hb = new Group("hibernate", "jboss");
30 gavin.getGroups().add(seam);
31 gavin.getGroups().add(hb);
32 seam.getUsers().add(gavin);
33 hb.getUsers().add(gavin);
34 s.persist(gavin);
35 s.persist(seam);
36 s.persist(hb);
37 t.commit();
38 s.close();
39
40 s = openSession();
41 t = s.beginTransaction();
42 gavin = (User) s.get(User.class, gavin);
43 assertFalse( Hibernate.isInitialized( gavin.getGroups() ) );
44 assertEquals( 2, gavin.getGroups().size() );
45 hb = (Group) s.get(Group.class, hb);
46 assertFalse( Hibernate.isInitialized( hb.getUsers() ) );
47 assertEquals( 1, hb.getUsers().size() );
48 t.commit();
49 s.close();
50
51 s = openSession();
52 t = s.beginTransaction();
53 gavin = (User) s.createCriteria(User.class)
54 .setFetchMode("groups", FetchMode.JOIN)
55 .uniqueResult();
56 assertTrue( Hibernate.isInitialized( gavin.getGroups() ) );
57 assertEquals( 2, gavin.getGroups().size() );
58 Group group = (Group) gavin.getGroups().iterator().next();
59 assertFalse( Hibernate.isInitialized( group.getUsers() ) );
60 assertEquals( 1, group.getUsers().size() );
61 t.commit();
62 s.close();
63
64 s = openSession();
65 t = s.beginTransaction();
66 gavin = (User) s.createCriteria(User.class)
67 .setFetchMode("groups", FetchMode.JOIN)
68 .setFetchMode("groups.users", FetchMode.JOIN)
69 .uniqueResult();
70 assertTrue( Hibernate.isInitialized( gavin.getGroups() ) );
71 assertEquals( 2, gavin.getGroups().size() );
72 group = (Group) gavin.getGroups().iterator().next();
73 assertTrue( Hibernate.isInitialized( group.getUsers() ) );
74 assertEquals( 1, group.getUsers().size() );
75 t.commit();
76 s.close();
77
78 s = openSession();
79 t = s.beginTransaction();
80 gavin = (User) s.createQuery("from User u join fetch u.groups g join fetch g.users").uniqueResult();
81 assertTrue( Hibernate.isInitialized( gavin.getGroups() ) );
82 assertEquals( 2, gavin.getGroups().size() );
83 group = (Group) gavin.getGroups().iterator().next();
84 assertTrue( Hibernate.isInitialized( group.getUsers() ) );
85 assertEquals( 1, group.getUsers().size() );
86 t.commit();
87 s.close();
88
89 s = openSession();
90 t = s.beginTransaction();
91 gavin = (User) s.get(User.class, gavin);
92 hb = (Group) s.get(Group.class, hb);
93 gavin.getGroups().remove(hb);
94 t.commit();
95 s.close();
96
97 s = openSession();
98 t = s.beginTransaction();
99 gavin = (User) s.get(User.class, gavin);
100 assertEquals( gavin.getGroups().size(), 1 );
101 hb = (Group) s.get(Group.class, hb);
102 assertEquals( hb.getUsers().size(), 0 );
103 t.commit();
104 s.close();
105
106 s = openSession();
107 t = s.beginTransaction();
108 s.delete(gavin);
109 s.flush();
110 s.createQuery("delete from Group").executeUpdate();
111 t.commit();
112 s.close();
113 }
114
115 protected String[] getMappings() {
116 return new String[] { "manytomany/UserGroup.hbm.xml" };
117 }
118
119 public static Test suite() {
120 return new TestSuite(ManyToManyTest.class);
121 }
122
123 protected void configure(Configuration cfg) {
124 cfg.setProperty(Environment.USE_SECOND_LEVEL_CACHE, "false");
125 }
126
127 }
128