1 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 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 129 | Popular Tags |