Author: steve.ebersole(a)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();
Show replies by date