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

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Wed Nov 11 17:20:48 EST 2009


Author: steve.ebersole at jboss.com
Date: 2009-11-11 17:20:48 -0500 (Wed, 11 Nov 2009)
New Revision: 17961

Modified:
   core/trunk/entitymanager/src/main/java/org/hibernate/ejb/QueryImpl.java
   core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/QueryTest.java
Log:
HHH-4567 - EntiytManager's QueryImpl mishandles ordinal position of HQL-style positional parameters


Modified: core/trunk/entitymanager/src/main/java/org/hibernate/ejb/QueryImpl.java
===================================================================
--- core/trunk/entitymanager/src/main/java/org/hibernate/ejb/QueryImpl.java	2009-11-11 20:36:03 UTC (rev 17960)
+++ core/trunk/entitymanager/src/main/java/org/hibernate/ejb/QueryImpl.java	2009-11-11 22:20:48 UTC (rev 17961)
@@ -75,7 +75,7 @@
 		extractParameterInfo();
 	}
 
-	@SuppressWarnings({ "unchecked" })
+	@SuppressWarnings({ "unchecked", "RedundantCast" })
 	private void extractParameterInfo() {
 		if ( ! AbstractQueryImpl.class.isInstance( query ) ) {
 			throw new IllegalStateException( "Unknown query type for parameter extraction" );
@@ -108,7 +108,7 @@
 			final OrdinalParameterDescriptor descriptor =
 					queryImpl.getParameterMetadata().getOrdinalParameterDescriptor( i+1 );
 			ParameterImpl parameter = new ParameterImpl(
-					descriptor.getOrdinalPosition() + 1,
+					i + 1,
 					descriptor.getExpectedType() == null
 							? null
 							: descriptor.getExpectedType().getReturnedClass()
@@ -204,7 +204,7 @@
 	/**
 	 * {@inheritDoc}
 	 */
-	@SuppressWarnings({ "unchecked" })
+	@SuppressWarnings({ "unchecked", "RedundantCast" })
 	public List<X> getResultList() {
 		try {
 			return (List<X>) query.list();
@@ -223,7 +223,7 @@
 	/**
 	 * {@inheritDoc}
 	 */
-	@SuppressWarnings({ "unchecked" })
+	@SuppressWarnings({ "unchecked", "RedundantCast" })
 	public X getSingleResult() {
 		try {
 			boolean mucked = false;

Modified: core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/QueryTest.java
===================================================================
--- core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/QueryTest.java	2009-11-11 20:36:03 UTC (rev 17960)
+++ core/trunk/entitymanager/src/test/java/org/hibernate/ejb/test/QueryTest.java	2009-11-11 22:20:48 UTC (rev 17961)
@@ -212,6 +212,40 @@
 		em.close();
 	}
 
+	public void testPositionalParameterForms() throws Exception {
+		EntityManager em = getOrCreateEntityManager();
+		em.getTransaction().begin();
+		Wallet w = new Wallet();
+		w.setBrand( "Lacoste" );
+		w.setModel( "Minimic" );
+		w.setSerial( "0100202002" );
+		em.persist( w );
+		em.getTransaction().commit();
+
+		em.getTransaction().begin();
+		// first using jpa-style positional parameter
+		Query query = em.createQuery( "select w from Wallet w where w.brand = ?1" );
+		query.setParameter( 1, "Lacoste" );
+		w = (Wallet) query.getSingleResult();
+		assertNotNull( w );
+
+		// next using jpa-style positional parameter, but as a name (which is how Hibernate core treats these
+		query = em.createQuery( "select w from Wallet w where w.brand = ?1" );
+		query.setParameter( "1", "Lacoste" );
+		w = (Wallet) query.getSingleResult();
+		assertNotNull( w );
+
+		// finally using hql-style positional parameter
+		query = em.createQuery( "select w from Wallet w where w.brand = ?" );
+		query.setParameter( 1, "Lacoste" );
+		w = (Wallet) query.getSingleResult();
+		assertNotNull( w );
+
+		em.remove( w );
+		em.getTransaction().commit();
+		em.close();
+	}
+
 	public void testNativeQuestionMarkParameter() throws Exception {
 		EntityManager em = getOrCreateEntityManager();
 		em.getTransaction().begin();



More information about the hibernate-commits mailing list