[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