[hibernate-commits] Hibernate SVN: r20656 - core/trunk/testsuite/src/test/java/org/hibernate/test/hql.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Thu Sep 16 16:29:04 EDT 2010


Author: gbadner
Date: 2010-09-16 16:29:03 -0400 (Thu, 16 Sep 2010)
New Revision: 20656

Added:
   core/trunk/testsuite/src/test/java/org/hibernate/test/hql/ASTParserLoadingOrderByTest.java
Modified:
   core/trunk/testsuite/src/test/java/org/hibernate/test/hql/Address.java
   core/trunk/testsuite/src/test/java/org/hibernate/test/hql/StateProvince.java
   core/trunk/testsuite/src/test/java/org/hibernate/test/hql/Zoo.java
Log:
HHH-892 HHH-5574 : test cases for HQL ORDER BY

Added: core/trunk/testsuite/src/test/java/org/hibernate/test/hql/ASTParserLoadingOrderByTest.java
===================================================================
--- core/trunk/testsuite/src/test/java/org/hibernate/test/hql/ASTParserLoadingOrderByTest.java	                        (rev 0)
+++ core/trunk/testsuite/src/test/java/org/hibernate/test/hql/ASTParserLoadingOrderByTest.java	2010-09-16 20:29:03 UTC (rev 20656)
@@ -0,0 +1,574 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2010, Red Hat Middleware LLC or third-party contributors as
+ * indicated by the @author tags or express copyright attribution
+ * statements applied by the authors.  All third-party contributions are
+ * distributed under license by Red Hat Middleware LLC.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA  02110-1301  USA
+ */
+package org.hibernate.test.hql;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+import java.sql.Date;
+import java.sql.Time;
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import junit.framework.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.hibernate.Hibernate;
+import org.hibernate.HibernateException;
+import org.hibernate.Query;
+import org.hibernate.QueryException;
+import org.hibernate.ScrollableResults;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.hibernate.TypeMismatchException;
+import org.hibernate.cfg.Configuration;
+import org.hibernate.cfg.Environment;
+import org.hibernate.dialect.DB2Dialect;
+import org.hibernate.dialect.HSQLDialect;
+import org.hibernate.dialect.IngresDialect;
+import org.hibernate.dialect.MySQLDialect;
+import org.hibernate.dialect.Oracle8iDialect;
+import org.hibernate.dialect.PostgreSQLDialect;
+import org.hibernate.dialect.SQLServerDialect;
+import org.hibernate.dialect.Sybase11Dialect;
+import org.hibernate.dialect.SybaseASE15Dialect;
+import org.hibernate.dialect.SybaseAnywhereDialect;
+import org.hibernate.dialect.SybaseDialect;
+import org.hibernate.hql.ast.ASTQueryTranslatorFactory;
+import org.hibernate.hql.ast.QuerySyntaxException;
+import org.hibernate.persister.entity.DiscriminatorType;
+import org.hibernate.stat.QueryStatistics;
+import org.hibernate.test.any.IntegerPropertyValue;
+import org.hibernate.test.any.PropertySet;
+import org.hibernate.test.any.PropertyValue;
+import org.hibernate.test.any.StringPropertyValue;
+import org.hibernate.test.cid.Customer;
+import org.hibernate.test.cid.LineItem;
+import org.hibernate.test.cid.LineItem.Id;
+import org.hibernate.test.cid.Order;
+import org.hibernate.test.cid.Product;
+import org.hibernate.testing.junit.functional.FunctionalTestCase;
+import org.hibernate.testing.junit.functional.FunctionalTestClassTestSuite;
+import org.hibernate.transform.DistinctRootEntityResultTransformer;
+import org.hibernate.transform.Transformers;
+import org.hibernate.type.ComponentType;
+import org.hibernate.type.ManyToOneType;
+import org.hibernate.type.Type;
+import org.hibernate.util.StringHelper;
+
+/**
+ * Tests AST parser processing of ORDER BY clauses.
+ *
+ * @author Gail Badner
+ */
+public class ASTParserLoadingOrderByTest extends FunctionalTestCase {
+
+	private static final Logger log = LoggerFactory.getLogger( ASTParserLoadingOrderByTest.class );
+
+	StateProvince stateProvince;
+	private Zoo zoo1;
+	private Zoo zoo2;
+	private Zoo zoo3;
+	private Zoo zoo4;
+	Set<Zoo> zoosWithSameName;
+	Set<Zoo> zoosWithSameAddress;
+
+	public ASTParserLoadingOrderByTest(String name) {
+		super( name );
+	}
+
+	public String[] getMappings() {
+		return new String[] {
+				"hql/Animal.hbm.xml",
+		};
+	}
+
+	public void configure(Configuration cfg) {
+		super.configure( cfg );
+		cfg.setProperty( Environment.USE_QUERY_CACHE, "false" );
+		cfg.setProperty( Environment.GENERATE_STATISTICS, "true" );
+		cfg.setProperty( Environment.QUERY_TRANSLATOR, ASTQueryTranslatorFactory.class.getName() );
+	}
+
+	public static Test suite() {
+		return new FunctionalTestClassTestSuite( ASTParserLoadingOrderByTest.class );
+	}
+
+	protected void prepareTest() {
+		cleanupData();
+	}
+
+	protected void createData() {
+		stateProvince = new StateProvince();
+		stateProvince.setName( "IL" );
+
+	    zoo1 = new Zoo();
+		zoo1.setName( "Zoo" );
+		Address address1 = new Address();
+		address1.setStreet( "1313 Mockingbird Lane" );
+		address1.setCity( "Anywhere" );
+		address1.setStateProvince( stateProvince );
+		address1.setCountry( "USA" );
+		zoo1.setAddress( address1 );
+
+		zoo2 = new Zoo();
+		zoo2.setName( "A Zoo" );
+		Address address2 = new Address();
+		address2.setStreet( "1313 Mockingbird Lane" );
+		address2.setCity( "Anywhere" );
+		address2.setStateProvince( stateProvince );
+		address2.setCountry( "USA" );
+		zoo2.setAddress( address2 );
+
+
+		zoo3 = new Zoo();
+		zoo3.setName( "Zoo" );
+		Address address3 = new Address();
+		address3.setStreet( "1312 Mockingbird Lane" );
+		address3.setCity( "Anywhere" );
+		address3.setStateProvince( stateProvince );
+		address3.setCountry( "USA" );
+		zoo3.setAddress( address3 );
+
+		zoo4 = new Zoo();
+		zoo4.setName( "Duh Zoo" );
+		Address address4 = new Address();
+		address4.setStreet( "1312 Mockingbird Lane" );
+		address4.setCity( "Nowhere" );
+		address4.setStateProvince( stateProvince );
+		address4.setCountry( "USA" );
+		zoo4.setAddress( address4 );
+
+		Session s = openSession();
+		Transaction t = s.beginTransaction();
+		s.save( stateProvince );
+		s.save( zoo1 );
+		s.save( zoo2 );
+		s.save( zoo3 );
+		s.save( zoo4 );
+		t.commit();
+		s.close();
+
+		zoosWithSameName = new HashSet<Zoo>( 2 );
+		zoosWithSameName.add( zoo1 );
+		zoosWithSameName.add( zoo3 );
+		zoosWithSameAddress = new HashSet<Zoo>( 2 );
+		zoosWithSameAddress.add( zoo1 );
+		zoosWithSameAddress.add( zoo2 );
+	}
+
+	protected void cleanupData() {
+		Session s = openSession();
+		Transaction t = s.beginTransaction();
+		if ( zoo1 != null ) {
+			s.delete( zoo1 );
+			zoo1 = null;
+		}
+		if ( zoo2 != null ) {
+			s.delete( zoo2 );
+			zoo2 = null;
+		}
+		if ( zoo3 != null ) {
+			s.delete( zoo3 );
+			zoo3 = null;
+		}
+		if ( zoo4 != null ) {
+			s.delete( zoo4 );
+			zoo4 = null;
+		}
+		t.commit();
+		s.close();
+	}
+
+	public void testOrderByNoSelectAliasRef() {
+		createData();
+
+		Session s = openSession();
+		Transaction t = s.beginTransaction();
+
+		// ordered by name, address:
+		//   zoo2  A Zoo       1313 Mockingbird Lane, Anywhere, IL USA
+		//   zoo4  Duh Zoo     1312 Mockingbird Lane, Nowhere, IL USA
+		//   zoo3  Zoo         1312 Mockingbird Lane, Anywhere, IL USA
+		//   zoo1  Zoo         1313 Mockingbird Lane, Anywhere, IL USA
+		checkTestOrderByResults(
+				s.createQuery(
+						"select name, address from Zoo order by name, address"
+				).list(),
+				zoo2, zoo4, zoo3, zoo1, null
+		);
+		checkTestOrderByResults(
+				s.createQuery(
+						"select z.name, z.address from Zoo z order by z.name, z.address"
+				).list(),
+				zoo2, zoo4, zoo3, zoo1, null
+		);
+		checkTestOrderByResults(
+				s.createQuery(
+						"select z2.name, z2.address from Zoo z2 where z2.name in ( select name from Zoo ) order by z2.name, z2.address"
+				).list(),
+				zoo2, zoo4, zoo3, zoo1, null
+		);
+		// using ASC
+		checkTestOrderByResults(
+				s.createQuery(
+						"select name, address from Zoo order by name ASC, address ASC"
+				).list(),
+				zoo2, zoo4, zoo3, zoo1, null
+		);
+		checkTestOrderByResults(
+				s.createQuery(
+						"select z.name, z.address from Zoo z order by z.name ASC, z.address ASC"
+				).list(),
+				zoo2, zoo4, zoo3, zoo1, null
+		);
+		checkTestOrderByResults(
+				s.createQuery(
+						"select z2.name, z2.address from Zoo z2 where z2.name in ( select name from Zoo ) order by z2.name ASC, z2.address ASC"
+				).list(),
+				zoo2, zoo4, zoo3, zoo1, null
+		);
+
+		// ordered by address, name:
+		//   zoo3  Zoo         1312 Mockingbird Lane, Anywhere, IL USA
+		//   zoo4  Duh Zoo     1312 Mockingbird Lane, Nowhere, IL USA
+		//   zoo2  A Zoo       1313 Mockingbird Lane, Anywhere, IL USA
+		//   zoo1  Zoo         1313 Mockingbird Lane, Anywhere, IL USA
+		checkTestOrderByResults(
+				s.createQuery(
+						"select z.name, z.address from Zoo z order by z.address, z.name"
+				).list(),
+				zoo3, zoo4, zoo2, zoo1, null
+		);
+		checkTestOrderByResults(
+				s.createQuery(
+						"select name, address from Zoo order by address, name"
+				).list(),
+				zoo3, zoo4, zoo2, zoo1, null
+		);
+
+		// ordered by address:
+		//   zoo3  Zoo         1312 Mockingbird Lane, Anywhere, IL USA
+		//   zoo4  Duh Zoo     1312 Mockingbird Lane, Nowhere, IL USA
+		// unordered:
+		//   zoo2  A Zoo       1313 Mockingbird Lane, Anywhere, IL USA
+		//   zoo1  Zoo         1313 Mockingbird Lane, Anywhere, IL USA
+		checkTestOrderByResults(
+				s.createQuery(
+						"select z.name, z.address from Zoo z order by z.address"
+				).list(),
+				zoo3, zoo4, null, null, zoosWithSameAddress
+		);
+		checkTestOrderByResults(
+				s.createQuery(
+						"select name, address from Zoo order by address"
+				).list(),
+				zoo3, zoo4, null, null, zoosWithSameAddress
+		);
+
+		// ordered by name:
+		//   zoo2  A Zoo       1313 Mockingbird Lane, Anywhere, IL USA
+		//   zoo4  Duh Zoo     1312 Mockingbird Lane, Nowhere, IL USA
+		// unordered:
+		//   zoo1  Zoo         1313 Mockingbird Lane, Anywhere, IL USA
+		//   zoo3  Zoo         1312 Mockingbird Lane, Anywhere, IL USA
+		checkTestOrderByResults(
+				s.createQuery(
+						"select z.name, z.address from Zoo z order by z.name"
+				).list(),
+				zoo2, zoo4, null, null, zoosWithSameName
+		);
+		checkTestOrderByResults(
+				s.createQuery(
+						"select name, address from Zoo order by name"
+				).list(),
+				zoo2, zoo4, null, null, zoosWithSameName
+		);
+		t.commit();
+		s.close();
+
+		cleanupData();
+	}
+
+	public void testOrderByComponentDescNoSelectAliasRefFailureExpected() {
+		createData();
+
+		Session s = openSession();
+		Transaction t = s.beginTransaction();
+
+		// ordered by address DESC, name DESC:
+		//   zoo3  Zoo         1312 Mockingbird Lane, Anywhere, IL USA
+		//   zoo4  Duh Zoo     1312 Mockingbird Lane, Nowhere, IL USA
+		//   zoo2  A Zoo       1313 Mockingbird Lane, Anywhere, IL USA
+		//   zoo1  Zoo         1313 Mockingbird Lane, Anywhere, IL USA
+		checkTestOrderByResults(
+				s.createQuery(
+						"select z.name, z.address from Zoo z order by z.address DESC, z.name DESC"
+				).list(),
+				zoo1, zoo2, zoo4, zoo3, null
+		);
+		checkTestOrderByResults(
+				s.createQuery(
+						"select name, address from Zoo order by address DESC, name DESC"
+				).list(),
+				zoo1, zoo2, zoo4, zoo3, null
+		);
+		t.commit();
+		s.close();
+		cleanupData();
+	}
+
+	public void testOrderBySelectAliasRefFailureExpected() {
+		createData();
+
+		Session s = openSession();
+		Transaction t = s.beginTransaction();
+
+		// ordered by name, address:
+		//   zoo2  A Zoo       1313 Mockingbird Lane, Anywhere, IL USA
+		//   zoo4  Duh Zoo     1312 Mockingbird Lane, Nowhere, IL USA
+		//   zoo3  Zoo         1312 Mockingbird Lane, Anywhere, IL USA
+		//   zoo1  Zoo         1313 Mockingbird Lane, Anywhere, IL USA
+		checkTestOrderByResults(
+				s.createQuery(
+						"select z2.name as zname, z2.address as zooAddress from Zoo z2 where z2.name in ( select name from Zoo ) order by zname, zooAddress"
+				).list(),
+				zoo2, zoo4, zoo3, zoo1, null
+		);
+		checkTestOrderByResults(
+				s.createQuery(
+						"select z.name as name, z.address as address from Zoo z order by name, address"
+				).list(),
+				zoo2, zoo4, zoo3, zoo1, null
+		);
+		checkTestOrderByResults(
+				s.createQuery(
+						"select z.name as zooName, z.address as zooAddress from Zoo z order by zooName, zooAddress"
+				).list(),
+				zoo2, zoo4, zoo3, zoo1, null
+		);
+		checkTestOrderByResults(
+				s.createQuery(
+						"select z.name, z.address as name from Zoo z order by z.name, name"
+				).list(),
+				zoo2, zoo4, zoo3, zoo1, null
+		);
+		checkTestOrderByResults(
+				s.createQuery(
+						"select z.name, z.address as name from Zoo z order by z.name, name"
+				).list(),
+				zoo2, zoo4, zoo3, zoo1, null
+		);
+		// using ASC
+		checkTestOrderByResults(
+				s.createQuery(
+						"select z2.name as zname, z2.address as zooAddress from Zoo z2 where z2.name in ( select name from Zoo ) order by zname ASC, zooAddress ASC"
+				).list(),
+				zoo2, zoo4, zoo3, zoo1, null
+		);
+		checkTestOrderByResults(
+				s.createQuery(
+						"select z.name as name, z.address as address from Zoo z order by name ASC, address ASC"
+				).list(),
+				zoo2, zoo4, zoo3, zoo1, null
+		);
+		checkTestOrderByResults(
+				s.createQuery(
+						"select z.name as zooName, z.address as zooAddress from Zoo z order by zooName ASC, zooAddress ASC"
+				).list(),
+				zoo2, zoo4, zoo3, zoo1, null
+		);
+		checkTestOrderByResults(
+				s.createQuery(
+						"select z.name, z.address as name from Zoo z order by z.name ASC, name ASC"
+				).list(),
+				zoo2, zoo4, zoo3, zoo1, null
+		);
+		checkTestOrderByResults(
+				s.createQuery(
+						"select z.name, z.address as name from Zoo z order by z.name ASC, name ASC"
+				).list(),
+				zoo2, zoo4, zoo3, zoo1, null
+		);
+
+		// ordered by address, name:
+		//   zoo3  Zoo         1312 Mockingbird Lane, Anywhere, IL USA
+		//   zoo4  Duh Zoo     1312 Mockingbird Lane, Nowhere, IL USA
+		//   zoo2  A Zoo       1313 Mockingbird Lane, Anywhere, IL USA
+		//   zoo1  Zoo         1313 Mockingbird Lane, Anywhere, IL USA
+		checkTestOrderByResults(
+				s.createQuery(
+						"select z.name as address, z.address as name from Zoo z order by name, address"
+				).list(),
+				zoo3, zoo4, zoo2, zoo1, null
+		);
+		checkTestOrderByResults(
+				s.createQuery(
+						"select z.name, z.address as name from Zoo z order by name, z.name"
+				).list(),
+				zoo3, zoo4, zoo2, zoo1, null
+		);
+		// using ASC
+		checkTestOrderByResults(
+				s.createQuery(
+						"select z.name as address, z.address as name from Zoo z order by name ASC, address ASC"
+				).list(),
+				zoo3, zoo4, zoo2, zoo1, null
+		);
+		checkTestOrderByResults(
+				s.createQuery(
+						"select z.name, z.address as name from Zoo z order by name ASC, z.name ASC"
+				).list(),
+				zoo3, zoo4, zoo2, zoo1, null
+		);
+
+		// ordered by address:
+		//   zoo3  Zoo         1312 Mockingbird Lane, Anywhere, IL USA
+		//   zoo4  Duh Zoo     1312 Mockingbird Lane, Nowhere, IL USA
+		// unordered:
+		//   zoo2  A Zoo       1313 Mockingbird Lane, Anywhere, IL USA
+		//   zoo1  Zoo         1313 Mockingbird Lane, Anywhere, IL USA
+		checkTestOrderByResults(
+				s.createQuery(
+						"select z.name as zooName, z.address as zooAddress from Zoo z order by zooAddress"
+				).list(),
+				zoo3, zoo4, null, null, zoosWithSameAddress
+		);
+
+		checkTestOrderByResults(
+				s.createQuery(
+						"select z.name as zooName, z.address as name from Zoo z order by name"
+				).list(),
+				zoo3, zoo4, null, null, zoosWithSameAddress
+		);
+
+		// ordered by name:
+		//   zoo2  A Zoo       1313 Mockingbird Lane, Anywhere, IL USA
+		//   zoo4  Duh Zoo     1312 Mockingbird Lane, Nowhere, IL USA
+		// unordered:
+		//   zoo1  Zoo         1313 Mockingbird Lane, Anywhere, IL USA
+		//   zoo3  Zoo         1312 Mockingbird Lane, Anywhere, IL USA
+		checkTestOrderByResults(
+				s.createQuery(
+						"select z.name as zooName, z.address as zooAddress from Zoo z order by zooName"
+				).list(),
+				zoo2, zoo4, null, null, zoosWithSameName
+		);
+
+		checkTestOrderByResults(
+				s.createQuery(
+						"select z.name as address, z.address as name from Zoo z order by address"
+				).list(),
+				zoo2, zoo4, null, null, zoosWithSameName
+		);
+		t.commit();
+		s.close();
+
+		s = openSession();
+		t = s.beginTransaction();
+		try {
+			s.createQuery(
+					"select z2.name as zname, z2.address as zooAddress from Zoo z2 where z2.name in ( select name as zname from Zoo order by zname ) order by zooAddress"
+			).list();
+			fail( "Exception should have been thrown because subquery has ORDER BY" );
+		}
+		catch ( QuerySyntaxException ex ) {
+			// expected
+		}
+		finally {
+			t.rollback();
+			s.close();
+		}
+
+		cleanupData();
+	}
+
+	public void testOrderByComponentDescSelectAliasRefFailureExpected() {
+		createData();
+
+		Session s = openSession();
+		Transaction t = s.beginTransaction();
+
+		// ordered by address desc, name desc:
+		//   zoo3  Zoo         1312 Mockingbird Lane, Anywhere, IL USA
+		//   zoo4  Duh Zoo     1312 Mockingbird Lane, Nowhere, IL USA
+		//   zoo2  A Zoo       1313 Mockingbird Lane, Anywhere, IL USA
+		//   zoo1  Zoo         1313 Mockingbird Lane, Anywhere, IL USA
+		// using DESC
+		checkTestOrderByResults(
+				s.createQuery(
+						"select z.name as zooName, z.address as zooAddress from Zoo z order by zooAddress DESC, zooName DESC"
+				).list(),
+				zoo1, zoo2, zoo4, zoo3, null
+		);
+
+		t.commit();
+		s.close();
+
+		cleanupData();
+	}
+
+	private void checkTestOrderByResults(List results,
+										 Zoo zoo1,
+										 Zoo zoo2,
+										 Zoo zoo3,
+										 Zoo zoo4,
+										 Set<Zoo> zoosUnordered) {
+		assertEquals( 4, results.size() );
+		Set<Zoo> zoosUnorderedCopy = ( zoosUnordered == null ? null : new HashSet<Zoo>( zoosUnordered ) );
+		checkTestOrderByResult( results.get( 0 ), zoo1, zoosUnorderedCopy );
+		checkTestOrderByResult( results.get( 1 ), zoo2, zoosUnorderedCopy );
+		checkTestOrderByResult( results.get( 2 ), zoo3, zoosUnorderedCopy );
+		checkTestOrderByResult( results.get( 3 ), zoo4, zoosUnorderedCopy );
+		if ( zoosUnorderedCopy != null ) {
+			assertTrue( zoosUnorderedCopy.isEmpty() );
+		}
+	}
+
+	private void checkTestOrderByResult(Object result,
+										Zoo zooExpected,
+										Set<Zoo> zoosUnordered) {
+		assertTrue( result instanceof Object[] );
+		Object[] resultArray = ( Object[] ) result;
+		assertEquals( 2,  resultArray.length );
+		Hibernate.initialize( ( ( Address ) resultArray[ 1 ] ).getStateProvince() );
+		if ( zooExpected == null ) {
+			Zoo zooResult = new Zoo();
+			zooResult.setName( ( String ) resultArray[ 0 ] );
+			zooResult.setAddress( ( Address ) resultArray[ 1 ] );
+			assertTrue( zoosUnordered.remove( zooResult ) );
+		}
+		else {
+			assertEquals( zooExpected.getName(), ( ( Object[] ) result )[ 0 ] );
+			assertEquals( zooExpected.getAddress(), ( ( Object[] ) result )[ 1 ] );
+		}
+	}
+}
\ No newline at end of file

Modified: core/trunk/testsuite/src/test/java/org/hibernate/test/hql/Address.java
===================================================================
--- core/trunk/testsuite/src/test/java/org/hibernate/test/hql/Address.java	2010-09-16 20:23:07 UTC (rev 20655)
+++ core/trunk/testsuite/src/test/java/org/hibernate/test/hql/Address.java	2010-09-16 20:29:03 UTC (rev 20656)
@@ -52,4 +52,44 @@
 	public void setStateProvince(StateProvince stateProvince) {
 		this.stateProvince = stateProvince;
 	}
+
+	@Override
+	public boolean equals(Object o) {
+		if ( this == o ) {
+			return true;
+		}
+		if ( o == null || getClass() != o.getClass() ) {
+			return false;
+		}
+
+		Address address = ( Address ) o;
+
+		if ( city != null ? !city.equals( address.city ) : address.city != null ) {
+			return false;
+		}
+		if ( country != null ? !country.equals( address.country ) : address.country != null ) {
+			return false;
+		}
+		if ( postalCode != null ? !postalCode.equals( address.postalCode ) : address.postalCode != null ) {
+			return false;
+		}
+		if ( stateProvince != null ? !stateProvince.equals( address.stateProvince ) : address.stateProvince != null ) {
+			return false;
+		}
+		if ( street != null ? !street.equals( address.street ) : address.street != null ) {
+			return false;
+		}
+
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = street != null ? street.hashCode() : 0;
+		result = 31 * result + ( city != null ? city.hashCode() : 0 );
+		result = 31 * result + ( postalCode != null ? postalCode.hashCode() : 0 );
+		result = 31 * result + ( country != null ? country.hashCode() : 0 );
+		result = 31 * result + ( stateProvince != null ? stateProvince.hashCode() : 0 );
+		return result;
+	}
 }

Modified: core/trunk/testsuite/src/test/java/org/hibernate/test/hql/StateProvince.java
===================================================================
--- core/trunk/testsuite/src/test/java/org/hibernate/test/hql/StateProvince.java	2010-09-16 20:23:07 UTC (rev 20655)
+++ core/trunk/testsuite/src/test/java/org/hibernate/test/hql/StateProvince.java	2010-09-16 20:29:03 UTC (rev 20656)
@@ -34,4 +34,32 @@
 	public void setIsoCode(String isoCode) {
 		this.isoCode = isoCode;
 	}
+
+	@Override
+	public boolean equals(Object o) {
+		if ( this == o ) {
+			return true;
+		}
+		if ( !( o instanceof StateProvince ) ) {
+			return false;
+		}
+
+		StateProvince that = ( StateProvince ) o;
+
+		if ( isoCode != null ? !isoCode.equals( that.getIsoCode() ) : that.getIsoCode() != null ) {
+			return false;
+		}
+		if ( name != null ? !name.equals( that.getName() ) : that.getName() != null ) {
+			return false;
+		}
+
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = name != null ? name.hashCode() : 0;
+		result = 31 * result + ( isoCode != null ? isoCode.hashCode() : 0 );
+		return result;
+	}
 }

Modified: core/trunk/testsuite/src/test/java/org/hibernate/test/hql/Zoo.java
===================================================================
--- core/trunk/testsuite/src/test/java/org/hibernate/test/hql/Zoo.java	2010-09-16 20:23:07 UTC (rev 20655)
+++ core/trunk/testsuite/src/test/java/org/hibernate/test/hql/Zoo.java	2010-09-16 20:29:03 UTC (rev 20656)
@@ -61,4 +61,32 @@
 	public void setClassification(Classification classification) {
 		this.classification = classification;
 	}
+
+	@Override
+	public boolean equals(Object o) {
+		if ( this == o ) {
+			return true;
+		}
+		if ( !( o instanceof Zoo ) ) {
+			return false;
+		}
+
+		Zoo zoo = ( Zoo ) o;
+
+		if ( address != null ? !address.equals( zoo.address ) : zoo.address != null ) {
+			return false;
+		}
+		if ( name != null ? !name.equals( zoo.name ) : zoo.name != null ) {
+			return false;
+		}
+
+		return true;
+	}
+
+	@Override
+	public int hashCode() {
+		int result = name != null ? name.hashCode() : 0;
+		result = 31 * result + ( address != null ? address.hashCode() : 0 );
+		return result;
+	}
 }



More information about the hibernate-commits mailing list