[hibernate-commits] Hibernate SVN: r17340 - in core/trunk/entitymanager/src: test/java/org/hibernate/ejb/criteria/basic and 1 other directory.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Mon Aug 17 15:09:17 EDT 2009


Author: steve.ebersole at jboss.com
Date: 2009-08-17 15:09:17 -0400 (Mon, 17 Aug 2009)
New Revision: 17340

Modified:
   core/trunk/entitymanager/src/main/java/org/hibernate/ejb/criteria/QueryStructure.java
   core/trunk/entitymanager/src/test/java/org/hibernate/ejb/criteria/basic/BasicCriteriaUsageTest.java
Log:
EJB-447 - Implement JPA 2.0 criteria apis (building)


Modified: core/trunk/entitymanager/src/main/java/org/hibernate/ejb/criteria/QueryStructure.java
===================================================================
--- core/trunk/entitymanager/src/main/java/org/hibernate/ejb/criteria/QueryStructure.java	2009-08-17 19:08:40 UTC (rev 17339)
+++ core/trunk/entitymanager/src/main/java/org/hibernate/ejb/criteria/QueryStructure.java	2009-08-17 19:09:17 UTC (rev 17340)
@@ -27,6 +27,7 @@
 import java.util.List;
 import java.util.Collections;
 import java.util.LinkedHashSet;
+import java.util.ArrayList;
 import javax.persistence.criteria.AbstractQuery;
 import javax.persistence.criteria.Root;
 import javax.persistence.criteria.Predicate;
@@ -78,14 +79,18 @@
 		ParameterContainer.Helper.possibleParameter(selection, registry);
 		ParameterContainer.Helper.possibleParameter(restriction, registry);
 		ParameterContainer.Helper.possibleParameter(having, registry);
-		for ( Subquery subquery : getSubqueries() ) {
-			ParameterContainer.Helper.possibleParameter(subquery, registry);
+		if ( subqueries != null ) {
+			for ( Subquery subquery : subqueries ) {
+				ParameterContainer.Helper.possibleParameter(subquery, registry);
+			}
 		}
 
 		// both group-by and having expressions can (though unlikely) contain parameters...
 		ParameterContainer.Helper.possibleParameter(having, registry);
-		for ( Expression<?> grouping : groupings ) {
-			ParameterContainer.Helper.possibleParameter(grouping, registry);
+		if ( groupings != null ) {
+			for ( Expression<?> grouping : groupings ) {
+				ParameterContainer.Helper.possibleParameter(grouping, registry);
+			}
 		}
 
 		return parameters;
@@ -128,7 +133,7 @@
 	}
 
 	public <X> Root<X> from(EntityType<X> entityType) {
-		RootImpl<X> root = new RootImpl( queryBuilder, entityType );
+		RootImpl<X> root = new RootImpl<X>( queryBuilder, entityType );
 		roots.add( root );
 		return root;
 	}
@@ -179,9 +184,16 @@
 		return subqueries;
 	}
 
+	public List<Subquery<?>> internalGetSubqueries() {
+		if ( subqueries == null ) {
+			subqueries = new ArrayList<Subquery<?>>();
+		}
+		return subqueries;
+	}
+
 	public <U> Subquery<U> subquery(Class<U> subqueryType) {
 		CriteriaSubqueryImpl<U> subquery = new CriteriaSubqueryImpl<U>( queryBuilder, subqueryType, owner );
-		subqueries.add( subquery );
+		internalGetSubqueries().add( subquery );
 		return subquery;
 	}
 }

Modified: core/trunk/entitymanager/src/test/java/org/hibernate/ejb/criteria/basic/BasicCriteriaUsageTest.java
===================================================================
--- core/trunk/entitymanager/src/test/java/org/hibernate/ejb/criteria/basic/BasicCriteriaUsageTest.java	2009-08-17 19:08:40 UTC (rev 17339)
+++ core/trunk/entitymanager/src/test/java/org/hibernate/ejb/criteria/basic/BasicCriteriaUsageTest.java	2009-08-17 19:09:17 UTC (rev 17340)
@@ -22,7 +22,11 @@
 package org.hibernate.ejb.criteria.basic;
 
 import javax.persistence.EntityManager;
+import javax.persistence.metamodel.SingularAttribute;
 import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.ParameterExpression;
+import javax.persistence.criteria.Root;
+import javax.persistence.criteria.Predicate;
 
 import org.hibernate.ejb.test.TestCase;
 
@@ -37,7 +41,7 @@
 		return new Class[] { Wall.class };
 	}
 
-	public void testSimpliestCriterias() {
+	public void testSimplestCriterias() {
 		EntityManager em = getOrCreateEntityManager();
 		em.getTransaction().begin();
 		CriteriaQuery criteria = em.getQueryBuilder().createQuery();
@@ -45,4 +49,21 @@
 		em.getTransaction().commit();
 		em.close();
 	}
+
+	public void testParameterCollection() {
+		EntityManager em = getOrCreateEntityManager();
+		em.getTransaction().begin();
+		CriteriaQuery criteria = em.getQueryBuilder().createQuery();
+		Root<Wall> from = criteria.from( Wall.class );
+		ParameterExpression param = em.getQueryBuilder().parameter( String.class );
+		SingularAttribute<? super Wall,?> colorAttribute = em.getMetamodel()
+				.entity( Wall.class )
+				.getDeclaredSingularAttribute( "color" );
+		assertNotNull( "metamodel returned null singular attribute", colorAttribute );
+		Predicate predicate = em.getQueryBuilder().equal( from.get( colorAttribute ), param );
+		criteria.where( predicate );
+		assertEquals( 1, criteria.getParameters().size() );
+		em.getTransaction().commit();
+		em.close();
+	}
 }



More information about the hibernate-commits mailing list