Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: org/hibernate/test/manytomany/ordered/OrderedManyToManyTest.java


1   package org.hibernate.test.manytomany.ordered;
2   
3   import org.hibernate.test.TestCase;
4   import org.hibernate.Session;
5   import org.hibernate.Transaction;
6   import org.hibernate.Hibernate;
7   import org.hibernate.FetchMode;
8   import org.hibernate.Criteria;
9   import org.hibernate.cfg.Configuration;
10  import org.hibernate.cfg.Environment;
11  import junit.framework.Test;
12  import junit.framework.TestSuite;
13  
14  import java.util.List;
15  
16  /**
17   * @author Gavin King
18   */
19  public class OrderedManyToManyTest extends TestCase {
20  
21    public OrderedManyToManyTest(String str) {
22      super(str);
23    }
24  
25    public void testManyToManyOrdering() {
26      Session s = openSession();
27      Transaction t = s.beginTransaction();
28      User gavin = new User( "gavin", "jboss" );
29      User steve = new User( "steve", "jboss" );
30      User max = new User( "max", "jboss" );
31      User emmanuel = new User( "emmanuel", "jboss" );
32      s.persist( gavin );
33      s.persist( steve );
34      s.persist( max );
35      s.persist( emmanuel );
36      Group hibernate = new Group( "hibernate", "jboss" );
37      hibernate.addUser( gavin );
38      hibernate.addUser( steve );
39      hibernate.addUser( max );
40      hibernate.addUser( emmanuel );
41      s.persist( hibernate );
42      t.commit();
43      s.close();
44  
45      // delayed collection load...
46      s = openSession();
47      t = s.beginTransaction();
48      hibernate = ( Group ) s.get( Group.class, hibernate.getId() );
49      assertFalse( Hibernate.isInitialized( hibernate.getUsers() ) );
50      assertEquals( 4, hibernate.getUsers().size() );
51      assertOrdering( hibernate.getUsers() );
52      t.commit();
53      s.close();
54  
55      // HQL (non eager)
56      s = openSession();
57      t = s.beginTransaction();
58      hibernate = ( Group ) s.createQuery( "from Group" ).uniqueResult();
59      assertFalse( Hibernate.isInitialized( hibernate.getUsers() ) );
60      assertEquals( 4, hibernate.getUsers().size() );
61      assertOrdering( hibernate.getUsers() );
62      t.commit();
63      s.close();
64  
65      // HQL (eager)
66      s = openSession();
67      t = s.beginTransaction();
68      hibernate = ( Group ) s.createQuery( "from Group g inner join fetch g.users" ).uniqueResult();
69      assertTrue( Hibernate.isInitialized( hibernate.getUsers() ) );
70      assertEquals( 4, hibernate.getUsers().size() );
71      assertOrdering( hibernate.getUsers() );
72      t.commit();
73      s.close();
74  
75      // criteria load (forced eager fetch)
76      s = openSession();
77      t = s.beginTransaction();
78      Criteria criteria = s.createCriteria( Group.class );
79      criteria.setFetchMode( "users", FetchMode.JOIN );
80      hibernate = ( Group ) criteria.uniqueResult();
81      assertTrue( Hibernate.isInitialized( hibernate.getUsers() ) );
82      assertEquals( 4, hibernate.getUsers().size() );
83      assertOrdering( hibernate.getUsers() );
84      t.commit();
85      s.close();
86  
87      // criteria load (forced non eager fetch)
88      s = openSession();
89      t = s.beginTransaction();
90      criteria = s.createCriteria( Group.class );
91      criteria.setFetchMode( "users", FetchMode.SELECT );
92      hibernate = ( Group ) criteria.uniqueResult();
93      assertFalse( Hibernate.isInitialized( hibernate.getUsers() ) );
94      assertEquals( 4, hibernate.getUsers().size() );
95      assertOrdering( hibernate.getUsers() );
96      t.commit();
97      s.close();
98  
99      // clean up
100     s = openSession();
101     t = s.beginTransaction();
102     s.delete( gavin );
103     s.delete( steve );
104     s.delete( max );
105     s.delete( emmanuel );
106     s.delete( hibernate );
107     t.commit();
108     s.close();
109   }
110 
111   private void assertOrdering(List users) {
112     User user = extractUser( users, 0 );
113     assertTrue( "many-to-many ordering not applied", user.getName().equals( "emmanuel" ) );
114     user = extractUser( users, 1 );
115     assertTrue( "many-to-many ordering not applied", user.getName().equals( "gavin" ) );
116     user = extractUser( users, 2 );
117     assertTrue( "many-to-many ordering not applied", user.getName().equals( "max" ) );
118     user = extractUser( users, 3 );
119     assertTrue( "many-to-many ordering not applied", user.getName().equals( "steve" ) );
120   }
121 
122   private User extractUser(List users, int position) {
123     return ( User ) users.get( position );
124   }
125   protected String[] getMappings() {
126     return new String[] { "manytomany/ordered/UserGroup.hbm.xml" };
127   }
128 
129   public static Test suite() {
130     return new TestSuite( OrderedManyToManyTest.class);
131   }
132 
133   protected void configure(Configuration cfg) {
134     cfg.setProperty( Environment.USE_SECOND_LEVEL_CACHE, "false");
135   }
136 
137 }