@SuppressWarnings("unchecked")
 private <T> T queryStringWithParameters(
     Map<String, Object> params,
     boolean singleResult,
     LockModeType lockMode,
     Class<T> clazz,
     Query query) {
   ;
   if (lockMode != null) {
     query.setLockMode(lockMode);
   }
   if (params != null && !params.isEmpty()) {
     for (String name : params.keySet()) {
       if (FIRST_RESULT.equals(name)) {
         query.setFirstResult((Integer) params.get(name));
         continue;
       }
       if (MAX_RESULTS.equals(name)) {
         query.setMaxResults((Integer) params.get(name));
         continue;
       }
       if (FLUSH_MODE.equals(name)) {
         query.setFlushMode(FlushModeType.valueOf((String) params.get(name)));
         continue;
       }
       query.setParameter(name, params.get(name));
     }
   }
   if (singleResult) {
     return (T) query.getSingleResult();
   }
   return (T) query.getResultList();
 }
 @SuppressWarnings({"unused", "unchecked"})
 public void testQueryNoPersonsShared() {
   EntityManager em = SharedEntityManagerCreator.createSharedEntityManager(entityManagerFactory);
   Query q = em.createQuery("select p from Person as p");
   q.setFlushMode(FlushModeType.AUTO);
   List<Person> people = q.getResultList();
   try {
     assertNull(q.getSingleResult());
     fail("Should have thrown NoResultException");
   } catch (NoResultException ex) {
     // expected
   }
 }
 @NotTransactional
 @SuppressWarnings("unchecked")
 public void testQueryNoPersonsSharedNotTransactional() {
   EntityManager em = SharedEntityManagerCreator.createSharedEntityManager(entityManagerFactory);
   Query q = em.createQuery("select p from Person as p");
   q.setFlushMode(FlushModeType.AUTO);
   List<Person> people = q.getResultList();
   assertEquals(0, people.size());
   try {
     assertNull(q.getSingleResult());
     fail("Should have thrown IllegalStateException");
   } catch (Exception ex) {
     // IllegalStateException expected, but PersistenceException thrown by Hibernate
     assertTrue(ex.getMessage().indexOf("closed") != -1);
   }
   q = em.createQuery("select p from Person as p");
   q.setFlushMode(FlushModeType.AUTO);
   try {
     assertNull(q.getSingleResult());
     fail("Should have thrown NoResultException");
   } catch (NoResultException ex) {
     // expected
   }
 }