[hibernate-commits] Hibernate SVN: r18706 - in core/trunk: annotations/src/test/java/org/hibernate/test/annotations/embedded/one2many and 2 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Fri Feb 5 16:51:25 EST 2010


Author: steve.ebersole at jboss.com
Date: 2010-02-05 16:51:24 -0500 (Fri, 05 Feb 2010)
New Revision: 18706

Modified:
   core/trunk/annotations/src/test/java/org/hibernate/test/annotations/embedded/many2one/EmbeddableWithMany2OneTest.java
   core/trunk/annotations/src/test/java/org/hibernate/test/annotations/embedded/one2many/EmbeddableWithOne2ManyTest.java
   core/trunk/core/src/main/java/org/hibernate/hql/ast/tree/DotNode.java
   core/trunk/core/src/main/java/org/hibernate/hql/ast/tree/FromClause.java
   core/trunk/testsuite/src/test/java/org/hibernate/test/hql/ASTParserLoadingTest.java
   core/trunk/testsuite/src/test/java/org/hibernate/test/hql/ComponentContainer.java
Log:
HHH-4883 - Unable to join across a component


Modified: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/embedded/many2one/EmbeddableWithMany2OneTest.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/embedded/many2one/EmbeddableWithMany2OneTest.java	2010-02-05 20:33:14 UTC (rev 18705)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/embedded/many2one/EmbeddableWithMany2OneTest.java	2010-02-05 21:51:24 UTC (rev 18706)
@@ -40,7 +40,6 @@
 		return new Class[] { Person.class, Country.class };
 	}
 
-	@FailureExpected( jiraKey = "HHH-4883")
 	public void testJoinAcrossEmbedded() {
 		Session session = openSession();
 		session.beginTransaction();

Modified: core/trunk/annotations/src/test/java/org/hibernate/test/annotations/embedded/one2many/EmbeddableWithOne2ManyTest.java
===================================================================
--- core/trunk/annotations/src/test/java/org/hibernate/test/annotations/embedded/one2many/EmbeddableWithOne2ManyTest.java	2010-02-05 20:33:14 UTC (rev 18705)
+++ core/trunk/annotations/src/test/java/org/hibernate/test/annotations/embedded/one2many/EmbeddableWithOne2ManyTest.java	2010-02-05 21:51:24 UTC (rev 18706)
@@ -43,6 +43,8 @@
 
 	@FailureExpected( jiraKey = "HHH-4883")
 	public void testJoinAcrossEmbedded() {
+		// NOTE : this may or may not work now with HHH-4883 fixed,
+		// but i cannot do this checking until HHH-4599 is done.
 		Session session = openSession();
 		session.beginTransaction();
 		session.createQuery( "from Person p join p.name.aliases a where a.source = 'FBI'" )

Modified: core/trunk/core/src/main/java/org/hibernate/hql/ast/tree/DotNode.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/hql/ast/tree/DotNode.java	2010-02-05 20:33:14 UTC (rev 18705)
+++ core/trunk/core/src/main/java/org/hibernate/hql/ast/tree/DotNode.java	2010-02-05 21:51:24 UTC (rev 18706)
@@ -445,9 +445,20 @@
 			JoinSequence joinSequence = getSessionFactoryHelper()
 				.createJoinSequence( impliedJoin, propertyType, tableAlias, joinType, joinColumns );
 
+			// If the lhs of the join is a "component join", we need to go back to the
+			// first non-component-join as the origin to properly link aliases and
+			// join columns
+			FromElement lhsFromElement = getLhs().getFromElement();
+			while ( lhsFromElement != null &&  ComponentJoin.class.isInstance( lhsFromElement ) ) {
+				lhsFromElement = lhsFromElement.getOrigin();
+			}
+			if ( lhsFromElement == null ) {
+				throw new QueryException( "Unable to locate appropriate lhs" );
+			}
+
 			FromElementFactory factory = new FromElementFactory(
 			        currentFromClause,
-					getLhs().getFromElement(),
+					lhsFromElement,
 					joinPath,
 					classAlias,
 					joinColumns,

Modified: core/trunk/core/src/main/java/org/hibernate/hql/ast/tree/FromClause.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/hql/ast/tree/FromClause.java	2010-02-05 20:33:14 UTC (rev 18705)
+++ core/trunk/core/src/main/java/org/hibernate/hql/ast/tree/FromClause.java	2010-02-05 21:51:24 UTC (rev 18706)
@@ -275,7 +275,7 @@
 
 	void addJoinByPathMap(String path, FromElement destination) {
 		if ( log.isDebugEnabled() ) {
-			log.debug( "addJoinByPathMap() : " + path + " -> " + destination );
+			log.debug( "addJoinByPathMap() : " + path + " -> " + destination.getDisplayText() );
 		}
 		fromElementsByPath.put( path, destination );
 	}

Modified: core/trunk/testsuite/src/test/java/org/hibernate/test/hql/ASTParserLoadingTest.java
===================================================================
--- core/trunk/testsuite/src/test/java/org/hibernate/test/hql/ASTParserLoadingTest.java	2010-02-05 20:33:14 UTC (rev 18705)
+++ core/trunk/testsuite/src/test/java/org/hibernate/test/hql/ASTParserLoadingTest.java	2010-02-05 21:51:24 UTC (rev 18706)
@@ -83,6 +83,7 @@
 				"hql/SimpleEntityWithAssociation.hbm.xml",
 				"hql/CrazyIdFieldNames.hbm.xml",
 				"hql/Image.hbm.xml",
+				"hql/ComponentContainer.hbm.xml",
 				"batchfetch/ProductLine.hbm.xml",
 				"cid/Customer.hbm.xml",
 				"cid/Order.hbm.xml",
@@ -105,6 +106,43 @@
 		return new FunctionalTestClassTestSuite( ASTParserLoadingTest.class );
 	}
 
+	public void testComponentJoins() {
+		Session s = openSession();
+		s.beginTransaction();
+		ComponentContainer root = new ComponentContainer(
+				new ComponentContainer.Address(
+						"123 Main",
+						"Anywhere",
+						"USA",
+						new ComponentContainer.Address.Zip( 12345, 6789 )
+				)
+		);
+		s.save( root );
+		s.getTransaction().commit();
+		s.close();
+
+		s = openSession();
+		s.beginTransaction();
+		List result = s.createQuery( "select a from ComponentContainer c join c.address a" ).list();
+		assertEquals( 1, result.size() );
+		assertTrue( ComponentContainer.Address.class.isInstance( result.get( 0 ) ) );
+
+		result = s.createQuery( "select a.zip from ComponentContainer c join c.address a" ).list();
+		assertEquals( 1, result.size() );
+		assertTrue( ComponentContainer.Address.Zip.class.isInstance( result.get( 0 ) ) );
+
+		result = s.createQuery( "select z from ComponentContainer c join c.address a join a.zip z" ).list();
+		assertEquals( 1, result.size() );
+		assertTrue( ComponentContainer.Address.Zip.class.isInstance( result.get( 0 ) ) );
+
+		result = s.createQuery( "select z.code from ComponentContainer c join c.address a join a.zip z" ).list();
+		assertEquals( 1, result.size() );
+		assertTrue( Integer.class.isInstance( result.get( 0 ) ) );
+		s.delete( root );
+		s.getTransaction().commit();
+		s.close();
+	}
+
 	public void testJPAQLQualifiedIdentificationVariables() {
 		Session s = openSession();
 		s.beginTransaction();

Modified: core/trunk/testsuite/src/test/java/org/hibernate/test/hql/ComponentContainer.java
===================================================================
--- core/trunk/testsuite/src/test/java/org/hibernate/test/hql/ComponentContainer.java	2010-02-05 20:33:14 UTC (rev 18705)
+++ core/trunk/testsuite/src/test/java/org/hibernate/test/hql/ComponentContainer.java	2010-02-05 21:51:24 UTC (rev 18706)
@@ -10,6 +10,13 @@
 	private Long id;
 	private ComponentContainer.Address address;
 
+	public ComponentContainer() {
+	}
+
+	public ComponentContainer(Address address) {
+		this.address = address;
+	}
+
 	public Long getId() {
 		return id;
 	}



More information about the hibernate-commits mailing list