Package org.hibernate.test.subclassfilter

Source Code of org.hibernate.test.subclassfilter.UnionSubclassFilterTest

// $Id: UnionSubclassFilterTest.java 10977 2006-12-12 23:28:04Z steve.ebersole@jboss.com $
package org.hibernate.test.subclassfilter;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;

import junit.framework.Test;

import org.hibernate.Transaction;
import org.hibernate.classic.Session;
import org.hibernate.testing.junit.functional.FunctionalTestCase;
import org.hibernate.testing.junit.functional.FunctionalTestClassTestSuite;

/**
* Implementation of DiscrimSubclassFilterTest.
*
* @author Steve Ebersole
*/
public class UnionSubclassFilterTest extends FunctionalTestCase {

  public UnionSubclassFilterTest(String name) {
    super( name );
  }

  public final String[] getMappings() {
    return new String[] { "subclassfilter/union-subclass.hbm.xml" };
  }

  public static Test suite() {
    return new FunctionalTestClassTestSuite( UnionSubclassFilterTest.class );
  }

  public void testFiltersWithUnionSubclass() {
    Session s = openSession();
    s.enableFilter( "region" ).setParameter( "userRegion", "US" );
    Transaction t = s.beginTransaction();

    prepareTestData( s );
    s.clear();

    List results;
    Iterator itr;

    results = s.createQuery( "from Person" ).list();
    assertEquals( "Incorrect qry result count", 4, results.size() );
    s.clear();

    results = s.createQuery( "from Employee" ).list();
    assertEquals( "Incorrect qry result count", 2, results.size() );
    s.clear();

    results = new ArrayList( new HashSet( s.createQuery( "from Person as p left join fetch p.minions" ).list() ) );
    assertEquals( "Incorrect qry result count", 4, results.size() );
    itr = results.iterator();
    while ( itr.hasNext() ) {
      // find john
      final Person p = ( Person ) itr.next();
      if ( p.getName().equals( "John Doe" ) ) {
        Employee john = ( Employee ) p;
        assertEquals( "Incorrect fecthed minions count", 1, john.getMinions().size() );
        break;
      }
    }
    s.clear();

    results = new ArrayList( new HashSet( s.createQuery( "from Employee as p left join fetch p.minions" ).list() ) );
    assertEquals( "Incorrect qry result count", 2, results.size() );
    itr = results.iterator();
    while ( itr.hasNext() ) {
      // find john
      final Person p = ( Person ) itr.next();
      if ( p.getName().equals( "John Doe" ) ) {
        Employee john = ( Employee ) p;
        assertEquals( "Incorrect fecthed minions count", 1, john.getMinions().size() );
        break;
      }
    }

    t.commit();
    s.close();

    s = openSession();
    t = s.beginTransaction();
    s.delete( "from Person" );
    t.commit();
    s.close();

  }

  private void prepareTestData(Session s) {
    Employee john = new Employee( "John Doe" );
    john.setCompany( "JBoss" );
    john.setDepartment( "hr" );
    john.setTitle( "hr guru" );
    john.setRegion( "US" );

    Employee polli = new Employee( "Polli Wog" );
    polli.setCompany( "JBoss" );
    polli.setDepartment( "hr" );
    polli.setTitle( "hr novice" );
    polli.setRegion( "US" );
    polli.setManager( john );
    john.getMinions().add( polli );

    Employee suzie = new Employee( "Suzie Q" );
    suzie.setCompany( "JBoss" );
    suzie.setDepartment( "hr" );
    suzie.setTitle( "hr novice" );
    suzie.setRegion( "EMEA" );
    suzie.setManager( john );
    john.getMinions().add( suzie );

    Customer cust = new Customer( "John Q Public" );
    cust.setCompany( "Acme" );
    cust.setRegion( "US" );
    cust.setContactOwner( john );

    Person ups = new Person( "UPS guy" );
    ups.setCompany( "UPS" );
    ups.setRegion( "US" );

    s.save( john );
    s.save( cust );
    s.save( ups );

    s.flush();
  }
}
TOP

Related Classes of org.hibernate.test.subclassfilter.UnionSubclassFilterTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.