Author: max.andersen(a)jboss.com
Date: 2006-10-16 10:56:30 -0400 (Mon, 16 Oct 2006)
New Revision: 10586
Modified:
trunk/Hibernate3/src/org/hibernate/impl/AbstractQueryImpl.java
trunk/Hibernate3/test/org/hibernate/test/legacy/SQLFunctionsTest.java
Log:
HHH-2037 provide Query.setProperties(Map)
Modified: trunk/Hibernate3/src/org/hibernate/impl/AbstractQueryImpl.java
===================================================================
--- trunk/Hibernate3/src/org/hibernate/impl/AbstractQueryImpl.java 2006-10-16 04:11:41 UTC
(rev 10585)
+++ trunk/Hibernate3/src/org/hibernate/impl/AbstractQueryImpl.java 2006-10-16 14:56:30 UTC
(rev 10586)
@@ -741,6 +741,30 @@
return setParameterList( name, Arrays.asList(vals) );
}
+ public Query setProperties(Map map) throws HibernateException {
+ String[] params = getNamedParameters();
+ for (int i = 0; i < params.length; i++) {
+ String namedParam = params[i];
+ final Object object = map.get(namedParam);
+ if(object==null) {
+ continue;
+ }
+ Class retType = object.getClass();
+ if ( Collection.class.isAssignableFrom( retType ) ) {
+ setParameterList( namedParam, ( Collection ) object );
+ }
+ else if ( retType.isArray() ) {
+ setParameterList( namedParam, ( Object[] ) object );
+ }
+ else {
+ setParameter( namedParam, object, determineType( namedParam, retType ) );
+ }
+
+
+ }
+ return this;
+ }
+
public Query setProperties(Object bean) throws HibernateException {
Class clazz = bean.getClass();
String[] params = getNamedParameters();
Modified: trunk/Hibernate3/test/org/hibernate/test/legacy/SQLFunctionsTest.java
===================================================================
--- trunk/Hibernate3/test/org/hibernate/test/legacy/SQLFunctionsTest.java 2006-10-16
04:11:41 UTC (rev 10585)
+++ trunk/Hibernate3/test/org/hibernate/test/legacy/SQLFunctionsTest.java 2006-10-16
14:56:30 UTC (rev 10586)
@@ -3,6 +3,7 @@
import java.util.ArrayList;
import java.util.Date;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
@@ -29,7 +30,6 @@
import org.hibernate.dialect.SybaseDialect;
import org.hibernate.dialect.TimesTenDialect;
import org.hibernate.dialect.function.SQLFunction;
-import org.hibernate.engine.SessionFactoryImplementor;
public class SQLFunctionsTest extends LegacyTestCase {
@@ -138,6 +138,37 @@
s.close();
}
+ public void testSetPropertiesMap() throws Exception {
+ Session s = openSession();
+ Transaction t = s.beginTransaction();
+ Simple simple = new Simple();
+ simple.setName("Simple 1");
+ s.save(simple, new Long(10) );
+ Map parameters = new HashMap();
+ parameters.put("name", simple.getName());
+ parameters.put("count", new Integer(simple.getCount()));
+
+ Query q = s.createQuery("from Simple s where s.name=:name and
s.count=:count");
+ q.setProperties(((Map)parameters));
+ assertTrue( q.list().get(0)==simple );
+
+ List l = new ArrayList();
+ l.add("Simple 1");
+ l.add("Slimeball");
+ parameters.put("several", l);
+ q = s.createQuery("from Simple s where s.name in (:several)");
+ q.setProperties(parameters);
+ assertTrue( q.list().get(0)==simple );
+
+
+ parameters.put("stuff", l.toArray(new String[0]));
+ q = s.createQuery("from Simple s where s.name in (:stuff)");
+ q.setProperties(parameters);
+ assertTrue( q.list().get(0)==simple );
+ s.delete(simple);
+ t.commit();
+ s.close();
+ }
public void testBroken() throws Exception {
if (getDialect() instanceof Oracle9Dialect) return;
Session s = openSession();
Show replies by date