Package org.hibernate.test.hqlfetchscroll

Source Code of org.hibernate.test.hqlfetchscroll.HQLScrollFetchTest

package org.hibernate.test.hqlfetchscroll;

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

import org.hibernate.ScrollableResults;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.dialect.Oracle8iDialect;
import org.hibernate.dialect.SQLServerDialect;
import org.hibernate.junit.functional.FunctionalTestCase;
import org.hibernate.transform.DistinctRootEntityResultTransformer;


public class HQLScrollFetchTest extends FunctionalTestCase {
  private static final String QUERY = "select p from Parent p join fetch p.children c";

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

  public void testNoScroll() {
    try {
      insertTestData();
      Session s = openSession();
      List list = s.createQuery( QUERY ).setResultTransformer(new DistinctRootEntityResultTransformer() ).list();
      assertResultFromAllUsers( list );
      s.close();
    }
    finally {
      deleteAll();
    }
  }

  public void testScroll() {
    if( getDialect() instanceof SQLServerDialect || getDialect() instanceof Oracle8iDialect ){
      reportSkip( "SQL Server and Oracle do not sort the result set automatically, so failure as expected","HQLScrollFetchTest" );
      return;
    }
    try {
      insertTestData();
      Session s = openSession();
      ScrollableResults results = s.createQuery( QUERY ).scroll();
      List list = new ArrayList();
      while ( results.next() ) {
        list.add( results.get( 0 ) );
      }
      assertResultFromAllUsers( list );
      s.close();
    }
    finally {
      deleteAll();
    }
  }

  public void testScrollOrderParentAsc() {
    try {
      insertTestData();
      Session s = openSession();
      ScrollableResults results = s.createQuery( QUERY + " order by p.name asc" ).scroll();
      List list = new ArrayList();
      while ( results.next() ) {
        list.add( results.get( 0 ) );
      }
      assertResultFromAllUsers( list );
      s.close();
    }
    finally {
      deleteAll();
    }
  }

  public void testScrollOrderParentDesc() {
    try {
      insertTestData();
      Session s = openSession();
      ScrollableResults results = s.createQuery( QUERY + " order by p.name desc" ).scroll();
      List list = new ArrayList();
      while ( results.next() ) {
        list.add( results.get( 0 ) );
      }
      assertResultFromAllUsers( list );
      s.close();
    }
    finally {
      deleteAll();
    }
  }

  public void testScrollOrderParentAscChildrenAsc() {
    try {
      insertTestData();
      Session s = openSession();
      ScrollableResults results = s.createQuery( QUERY + " order by p.name asc, c.name asc" ).scroll();
      List list = new ArrayList();
      while ( results.next() ) {
        list.add( results.get( 0 ) );
      }
      assertResultFromAllUsers( list );
      s.close();
    }
    finally {
      deleteAll();
    }
  }

  public void testScrollOrderParentAscChildrenDesc() {
    try {
      insertTestData();
      Session s = openSession();
      ScrollableResults results = s.createQuery( QUERY + " order by p.name asc, c.name desc" ).scroll();
      List list = new ArrayList();
      while ( results.next() ) {
        list.add( results.get( 0 ) );
      }
      assertResultFromAllUsers( list );
      s.close();
    }
    finally {
      deleteAll();
    }
  }

  private void assertResultFromAllUsers(List list) {
    assertEquals( "list is not correct size: ", 2, list.size() );
    for ( Iterator i = list.iterator(); i.hasNext(); ) {
      Parent parent = (Parent) i.next();
      assertEquals(
          "parent " + parent + " has incorrect collection(" + parent.getChildren() + ").",
          3,
          parent.getChildren().size()
      );
    }
  }

  private void deleteAll() {
    Session s = openSession();
    Transaction t = s.beginTransaction();
    List list = s.createQuery( "from Parent" ).list();
    for ( Iterator i = list.iterator(); i.hasNext(); ) {
      s.delete( (Parent) i.next() );
    }
    t.commit();
    s.close();
  }
  private void insertTestData() {
    Session s = openSession();
    Transaction t = s.beginTransaction();
    Child child_1_1 = new Child( "achild1-1");
    Child child_1_2 = new Child( "ychild1-2");
    Child child_1_3 = new Child( "dchild1-3");
    Child child_2_1 = new Child( "bchild2-1");
    Child child_2_2 = new Child( "cchild2-2");
    Child child_2_3 = new Child( "zchild2-3");

    s.save( child_1_1 );
    s.save( child_2_1 );
    s.save( child_1_2 );
    s.save( child_2_2 );
    s.save( child_1_3 );
    s.save( child_2_3 );

    s.flush();

    Parent p1 = new Parent( "parent1" );
    p1.addChild( child_1_1 );
    p1.addChild( child_1_2 );
    p1.addChild( child_1_3 );
    s.save( p1 );

    Parent p2 = new Parent( "parent2" );
    p2.addChild( child_2_1 );
    p2.addChild( child_2_2 );
    p2.addChild( child_2_3 );
    s.save( p2 );

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

//  private void insertTestData() {
//    Session s = openSession();
//    Transaction t = s.beginTransaction();
//    s.save( makeParent( "parent1", "child1-1", "child1-2", "child1-3" ) );
//    s.save( makeParent( "parent2", "child2-1", "child2-2", "child2-3" ) );
//    t.commit();
//    s.close();
//  }

  public String[] getMappings() {
    return new String[] { "hqlfetchscroll/ParentChild.hbm.xml" };
  }

//  protected Object makeParent(String name, String child1, String child2, String child3) {
//    Parent parent = new Parent( name );
//    parent.addChild( new Child( child1 ) );
//    parent.addChild( new Child( child2 ) );
//    parent.addChild( new Child( child3 ) );
//    return parent;
//  }
}
TOP

Related Classes of org.hibernate.test.hqlfetchscroll.HQLScrollFetchTest

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.