[hibernate-commits] Hibernate SVN: r10831 - trunk/Hibernate3/src/org/hibernate/hql/ast/tree

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Thu Nov 16 16:20:52 EST 2006


Author: steve.ebersole at jboss.com
Date: 2006-11-16 16:20:50 -0500 (Thu, 16 Nov 2006)
New Revision: 10831

Modified:
   trunk/Hibernate3/src/org/hibernate/hql/ast/tree/DotNode.java
   trunk/Hibernate3/src/org/hibernate/hql/ast/tree/FromElement.java
Log:
minor changes for robustness

Modified: trunk/Hibernate3/src/org/hibernate/hql/ast/tree/DotNode.java
===================================================================
--- trunk/Hibernate3/src/org/hibernate/hql/ast/tree/DotNode.java	2006-11-16 20:22:07 UTC (rev 10830)
+++ trunk/Hibernate3/src/org/hibernate/hql/ast/tree/DotNode.java	2006-11-16 21:20:50 UTC (rev 10831)
@@ -600,10 +600,10 @@
 	}
 
 	private boolean checkSubclassOrSuperclassPropertyReference(FromReferenceNode lhs, String propertyName) {
-		if ( lhs != null && !( lhs instanceof IndexNode ) && lhs.getDataType() != null && ! lhs.getDataType().isComponentType() ) {
+		if ( lhs != null && !( lhs instanceof IndexNode ) ) {
 			final FromElement source = lhs.getFromElement();
 			if ( source != null ) {
-				source.handlePropertyBeingDereferenced( propertyName );
+				source.handlePropertyBeingDereferenced( lhs.getDataType(), propertyName );
 			}
 		}
 		return false;

Modified: trunk/Hibernate3/src/org/hibernate/hql/ast/tree/FromElement.java
===================================================================
--- trunk/Hibernate3/src/org/hibernate/hql/ast/tree/FromElement.java	2006-11-16 20:22:07 UTC (rev 10830)
+++ trunk/Hibernate3/src/org/hibernate/hql/ast/tree/FromElement.java	2006-11-16 21:20:50 UTC (rev 10831)
@@ -5,6 +5,7 @@
 import java.util.List;
 
 import org.hibernate.QueryException;
+import org.hibernate.MappingException;
 import org.hibernate.engine.JoinSequence;
 import org.hibernate.hql.QueryTranslator;
 import org.hibernate.hql.CollectionProperties;
@@ -513,12 +514,19 @@
 		}
 	}
 
-	public void handlePropertyBeingDereferenced(String propertyName) {
+	public void handlePropertyBeingDereferenced(Type propertySource, String propertyName) {
 		if ( getQueryableCollection() != null && CollectionProperties.isCollectionProperty( propertyName ) ) {
+			// propertyName refers to something like collection.size...
+			return;
 		}
-		else {
-			Queryable persister = getQueryable();
-			if ( persister != null ) {
+		if ( propertySource.isComponentType() ) {
+			// property name is a sub-path of a component...
+			return;
+		}
+
+		Queryable persister = getQueryable();
+		if ( persister != null ) {
+			try {
 				Queryable.Declarer propertyDeclarer = persister.getSubclassPropertyDeclarer( propertyName );
 				if ( log.isTraceEnabled() ) {
 					log.trace( "handling property dereference [" + persister.getEntityName() + " (" + getClassAlias() + ") -> " + propertyName + " (" + propertyDeclarer + ")]" );
@@ -531,6 +539,12 @@
 					dereferencedBySuperclassProperty = true;
 				}
 			}
+			catch( QueryException ignore ) {
+				// ignore it; the incoming property could not be found so we
+				// cannot be sure what to do here.  At the very least, the
+				// safest is to simply not apply any dereference toggling...
+
+			}
 		}
 	}
 




More information about the hibernate-commits mailing list