Note that there are some explanatory texts on larger screens.

plurals
  1. POJPA setting parameters with setParameter in foreach works as if only one parameter was set
    text
    copied!<p>I need to make a query with parameters taken from a Map.</p> <pre><code>public String executeQuery(String string, Map&lt;String, String&gt; params) { try { Query query = em.createQuery(string); System.out.println(em.createQuery(string).getClass()); for(String key:params.keySet()) { query.setParameter(key, params.get(key)); System.out.println("query.setParameter("+key+","+ params.get(key)+");"); } List&lt;?&gt; list = query.getResultList(); return list.toString(); } catch (Exception e) { e.printStackTrace(); return null; } } </code></pre> <p>The following works great:</p> <pre><code>Query query = em.createQuery("select u from User u where u.email=:email or u.name=:name"); query = query.setParameter("email","admin"); query = query.setParameter("name","name1"); List&lt;?&gt; list = query.getResultList(); return list.toString(); </code></pre> <p>I get two instances of user, one for admin and one for name1. However, when I set the very same query using the code above, I get only one result (usually for the latter parameter).</p> <p>Whether I use :name or ?1 doesn't matter. Each setParameter() inside the foreach has the correct parameters. The query after the foreach block has both parameters set right - I used this to check it (?1 syntax):</p> <pre><code>"Parameters: "+query.getParameter("name").getName()+ ": "+ query.getParameterValue("name")+", "+query.getParameter("email").getName() +": "+query.getParameterValue("email"); </code></pre> <p>I use Glassfish 3.1.2, Hibernate 4.1.5 SP1, MySQL Community Server 5.5. The method lays in a stateless session bean.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload