[hibernate-commits] Hibernate SVN: r18754 - in core/trunk: annotations/src/test/resources and 3 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Tue Feb 9 16:45:16 EST 2010


Author: steve.ebersole at jboss.com
Date: 2010-02-09 16:45:15 -0500 (Tue, 09 Feb 2010)
New Revision: 18754

Modified:
   core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e1/a/DerivedIdentitySimpleParentIdClassDepTest.java
   core/trunk/annotations/src/test/resources/log4j.properties
   core/trunk/core/src/main/java/org/hibernate/persister/entity/AbstractPropertyMapping.java
   core/trunk/testsuite/src/test/java/org/hibernate/test/keymanytoone/bidir/component/EagerKeyManyToOneTest.java
   core/trunk/testsuite/src/test/java/org/hibernate/test/keymanytoone/bidir/component/LazyKeyManyToOneTest.java
   core/trunk/testsuite/src/test/java/org/hibernate/test/keymanytoone/bidir/embedded/KeyManyToOneTest.java
Log:
HHH-4895 - query against derived id doesn't return expected result


Modified: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e1/a/DerivedIdentitySimpleParentIdClassDepTest.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e1/a/DerivedIdentitySimpleParentIdClassDepTest.java	2010-02-09 21:29:34 UTC (rev 18753)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/derivedidentities/e1/a/DerivedIdentitySimpleParentIdClassDepTest.java	2010-02-09 21:45:15 UTC (rev 18754)
@@ -1,5 +1,6 @@
 package org.hibernate.test.annotations.derivedidentities.e1.a;
 
+import org.hibernate.Query;
 import org.hibernate.Session;
 import org.hibernate.test.annotations.TestCase;
 import org.hibernate.test.util.SchemaUtil;
@@ -50,14 +51,11 @@
 		// List depList = s.createQuery("Select d from Dependent d where d.name='LittleP'").list();
 
 		// the following query is not finding the entity 'd' added above
-		List depList = s.createQuery("Select d from Dependent d where d.name='LittleP' and d.emp.name='Paula'").list();
-		Object newDependent = null;
-		if (depList.size() > 0) {
-			 newDependent = (Dependent) depList.get(0);
-		}
-		if (newDependent != d) {
-			fail("PC entity instance (" + d +") does not match returned query result value (" + newDependent);
-		}
+		Query query = s.createQuery("Select d from Dependent d where d.name='LittleP' and d.emp.empName='Paula'");
+		List depList = query.list();
+		assertEquals( 1, depList.size() );
+		Object newDependent = (Dependent) depList.get(0);
+		assertSame( d, newDependent );
 		s.getTransaction().rollback();
 		s.close();
 	}

Modified: core/trunk/annotations/src/test/resources/log4j.properties
===================================================================
--- core/trunk/annotations/src/test/resources/log4j.properties	2010-02-09 21:29:34 UTC (rev 18753)
+++ core/trunk/annotations/src/test/resources/log4j.properties	2010-02-09 21:45:15 UTC (rev 18754)
@@ -30,7 +30,7 @@
 #log4j.logger.org.hibernate.engine.CascadingAction=debug
 
 ### log JDBC bind parameters ###
-log4j.logger.org.hibernate.type=debug
+log4j.logger.org.hibernate.type=trace
 
 ### log schema export/update ###
 log4j.logger.org.hibernate.tool.hbm2ddl=debug

Modified: core/trunk/core/src/main/java/org/hibernate/persister/entity/AbstractPropertyMapping.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/persister/entity/AbstractPropertyMapping.java	2010-02-09 21:29:34 UTC (rev 18753)
+++ core/trunk/core/src/main/java/org/hibernate/persister/entity/AbstractPropertyMapping.java	2010-02-09 21:45:15 UTC (rev 18754)
@@ -27,6 +27,9 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import org.hibernate.MappingException;
 import org.hibernate.QueryException;
 import org.hibernate.engine.Mapping;
@@ -44,6 +47,7 @@
  * @author Gavin King
  */
 public abstract class AbstractPropertyMapping implements PropertyMapping {
+	private static final Logger log = LoggerFactory.getLogger( AbstractPropertyMapping.class );
 
 	private final Map typesByPropertyPath = new HashMap();
 	private final Map columnsByPropertyPath = new HashMap();
@@ -124,9 +128,24 @@
 		return result;
 	}
 
-	protected void addPropertyPath(String path, Type type, String[] columns,
-			String[] columnReaders, String[] columnReaderTemplates,
+	protected void addPropertyPath(
+			String path,
+			Type type,
+			String[] columns,
+			String[] columnReaders,
+			String[] columnReaderTemplates,
 			String[] formulaTemplates) {
+		// TODO : not quite sure yet of the difference, but this is only needed from annotations for @Id @ManyToOne support
+		if ( typesByPropertyPath.containsKey( path ) ) {
+			if ( log.isTraceEnabled() ) {
+				log.trace(
+						"Skipping duplicate registration of path [" + path
+								+ "], existing type = [" + typesByPropertyPath.get(path)
+								+ "], incoming type = [" + type + "]"
+				);
+			}
+			return;
+		}
 		typesByPropertyPath.put(path, type);
 		columnsByPropertyPath.put(path, columns);
 		columnReadersByPropertyPath.put(path, columnReaders);

Modified: core/trunk/testsuite/src/test/java/org/hibernate/test/keymanytoone/bidir/component/EagerKeyManyToOneTest.java
===================================================================
--- core/trunk/testsuite/src/test/java/org/hibernate/test/keymanytoone/bidir/component/EagerKeyManyToOneTest.java	2010-02-09 21:29:34 UTC (rev 18753)
+++ core/trunk/testsuite/src/test/java/org/hibernate/test/keymanytoone/bidir/component/EagerKeyManyToOneTest.java	2010-02-09 21:45:15 UTC (rev 18754)
@@ -1,5 +1,7 @@
 package org.hibernate.test.keymanytoone.bidir.component;
 
+import java.util.List;
+
 import junit.framework.Test;
 
 import org.hibernate.HibernateException;

Modified: core/trunk/testsuite/src/test/java/org/hibernate/test/keymanytoone/bidir/component/LazyKeyManyToOneTest.java
===================================================================
--- core/trunk/testsuite/src/test/java/org/hibernate/test/keymanytoone/bidir/component/LazyKeyManyToOneTest.java	2010-02-09 21:29:34 UTC (rev 18753)
+++ core/trunk/testsuite/src/test/java/org/hibernate/test/keymanytoone/bidir/component/LazyKeyManyToOneTest.java	2010-02-09 21:45:15 UTC (rev 18754)
@@ -1,5 +1,7 @@
 package org.hibernate.test.keymanytoone.bidir.component;
 
+import java.util.List;
+
 import junit.framework.Test;
 
 import org.hibernate.Session;
@@ -29,6 +31,32 @@
 		cfg.setProperty( Environment.GENERATE_STATISTICS, "true" );
 	}
 
+	public void testQueryingOnMany2One() {
+		Session s = openSession();
+		s.beginTransaction();
+		Customer cust = new Customer( "Acme, Inc." );
+		Order order = new Order( new Order.Id( cust, 1 ) );
+		cust.getOrders().add( order );
+		s.save( cust );
+		s.getTransaction().commit();
+		s.close();
+
+		s = openSession();
+		s.beginTransaction();
+		List results = s.createQuery( "from Order o where o.id.customer.name = :name" )
+				.setParameter( "name", cust.getName() )
+				.list();
+		assertEquals( 1, results.size() );
+		s.getTransaction().commit();
+		s.close();
+
+		s = openSession();
+		s.beginTransaction();
+		s.delete( cust );
+		s.getTransaction().commit();
+		s.close();
+	}
+
 	public void testSaveCascadedToKeyManyToOne() {
 		// test cascading a save to an association with a key-many-to-one which refers to a
 		// just saved entity

Modified: core/trunk/testsuite/src/test/java/org/hibernate/test/keymanytoone/bidir/embedded/KeyManyToOneTest.java
===================================================================
--- core/trunk/testsuite/src/test/java/org/hibernate/test/keymanytoone/bidir/embedded/KeyManyToOneTest.java	2010-02-09 21:29:34 UTC (rev 18753)
+++ core/trunk/testsuite/src/test/java/org/hibernate/test/keymanytoone/bidir/embedded/KeyManyToOneTest.java	2010-02-09 21:45:15 UTC (rev 18754)
@@ -1,5 +1,7 @@
 package org.hibernate.test.keymanytoone.bidir.embedded;
 
+import java.util.List;
+
 import junit.framework.Test;
 
 import org.hibernate.Session;
@@ -45,6 +47,32 @@
 		s.close();
 	}
 
+	public void testQueryingOnMany2One() {
+		Session s = openSession();
+		s.beginTransaction();
+		Customer cust = new Customer( "Acme, Inc." );
+		Order order = new Order( cust, 1 );
+		cust.getOrders().add( order );
+		s.save( cust );
+		s.getTransaction().commit();
+		s.close();
+
+		s = openSession();
+		s.beginTransaction();
+		List results = s.createQuery( "from Order o where o.customer.name = :name" )
+				.setParameter( "name", cust.getName() )
+				.list();
+		assertEquals( 1, results.size() );
+		s.getTransaction().commit();
+		s.close();
+
+		s = openSession();
+		s.beginTransaction();
+		s.delete( cust );
+		s.getTransaction().commit();
+		s.close();
+	}
+
 	public void testLoadingStrategies() {
 		Session s = openSession();
 		s.beginTransaction();



More information about the hibernate-commits mailing list