problem with ResourceTypeCriteria

John Mazzitelli mazz at redhat.com
Sat Oct 23 19:08:02 UTC 2010


I don't get it. I run this code, and each System.out.println shows me 
that the results have 48 rows - but each query should only produce 1 row.

Note: if I go to admin/test/hibernate.jsp, and try this JPQL string, it 
actually only produces 1 row (the correct results!). I don't know what 
its doing differently, but here's the code that I tested with - there 
are actually 4 different ways I try it (two using JPA API, two using 
Hibernate API - for each I try using a collection of 1 ID integer, and I 
try using a single parameter value of Integer type).

String sqlString = "SELECT resourcetype " + //
     "FROM ResourceType resourcetype " + //
     "LEFT JOIN FETCH resourcetype.resourceConfigurationDefinition " + //
     "LEFT JOIN FETCH resourcetype.metricDefinitions " + //
     "LEFT JOIN FETCH resourcetype.eventDefinitions " + //
     "LEFT JOIN FETCH resourcetype.operationDefinitions " + //
     "WHERE ( resourcetype.id in ( :ids ) ) ";

ArrayList<Integer> idList = new ArrayList<Integer>();
idList.add(new Integer(10014));

Query q;
List<?> results;

// JPA - parameter is an ArrayList of 1 ID
q = entityManager.createQuery(sqlString);
q.setParameter("ids", idList);
results = q.getResultList();
System.out.println("1~~~~~~~~~size=" + results.size());

// JPA - parameter is a single Integer value
q = entityManager.createQuery(sqlString);
q.setParameter("ids", new Integer(10014));
results = q.getResultList();
System.out.println("2~~~~~~~~~size=" + results.size());

Session session;
org.hibernate.Query hq;
session = (Session) entityManager.getDelegate();

// Hibernate - parameter is an ArrayList of 1 ID
hq = session.createQuery(sqlString);
hq.setParameterList("ids", idList);
results = hq.list();
System.out.println("3~~~~~~~~~size=" + results.size());

// Hibernate - parameter is a single Integer value
hq = session.createQuery(sqlString);
hq.setParameter("ids", new Integer(10014));
results = hq.list();
System.out.println("4~~~~~~~~~size=" + results.size());


More information about the rhq-devel mailing list