HHH-4604 IllegalArgumentException should be raised when an ordinal parameter is not present in the query
git-svn-id: https://svn.jboss.org/repos/hibernate/core/trunk@18029 1b8cb986-b30d-0410-93ca-fae66ebed9b2
This commit is contained in:
parent
9d5f0d084a
commit
07c5967f46
|
@ -76,7 +76,9 @@ public class ParameterMetadata implements Serializable {
|
|||
|
||||
public OrdinalParameterDescriptor getOrdinalParameterDescriptor(int position) {
|
||||
if ( position < 1 || position > ordinalDescriptors.length ) {
|
||||
throw new IndexOutOfBoundsException( "Remember that ordinal parameters are 1-based!" );
|
||||
String error = "Position beyond number of declared ordinal parameters. " +
|
||||
"Remember that ordinal parameters are 1-based! Position: " + position;
|
||||
throw new QueryParameterException( error );
|
||||
}
|
||||
return ordinalDescriptors[position - 1];
|
||||
}
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
* 51 Franklin Street, Fifth Floor
|
||||
* Boston, MA 02110-1301 USA\
|
||||
*/
|
||||
package org.hibernate.ejb.test.ql;
|
||||
package org.hibernate.ejb.test.query;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
//$Id$
|
||||
package org.hibernate.ejb.test;
|
||||
package org.hibernate.ejb.test.query;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
|
@ -9,6 +9,10 @@ import javax.persistence.Query;
|
|||
import javax.persistence.TemporalType;
|
||||
|
||||
import org.hibernate.Hibernate;
|
||||
import org.hibernate.ejb.test.TestCase;
|
||||
import org.hibernate.ejb.test.Item;
|
||||
import org.hibernate.ejb.test.Wallet;
|
||||
import org.hibernate.ejb.test.Distributor;
|
||||
|
||||
|
||||
/**
|
||||
|
@ -246,6 +250,33 @@ public class QueryTest extends TestCase {
|
|||
em.close();
|
||||
}
|
||||
|
||||
public void testPositionalParameterWithUserError() 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.flush();
|
||||
|
||||
|
||||
try {
|
||||
Query query = em.createQuery( "select w from Wallet w where w.brand = ?1 and w.model = ?3" );
|
||||
query.setParameter( 1, "Lacoste" );
|
||||
query.setParameter( 2, "Expensive" );
|
||||
query.getResultList();
|
||||
fail("The query should fail due to a user error in parameters");
|
||||
}
|
||||
catch ( IllegalArgumentException e ) {
|
||||
//success
|
||||
}
|
||||
finally {
|
||||
em.getTransaction().rollback();
|
||||
em.close();
|
||||
}
|
||||
}
|
||||
|
||||
public void testNativeQuestionMarkParameter() throws Exception {
|
||||
EntityManager em = getOrCreateEntityManager();
|
||||
em.getTransaction().begin();
|
Loading…
Reference in New Issue