/** Find multiple objects with pagination. */ public <A> List<A> findAll(final EntityManager em, final String q, final int offset, final int limit, final P... params) { final Query query = query(em, q, params); query.setFirstResult(offset); query.setMaxResults(limit); return (List<A>) query.getResultList(); }
/** Run a COUNT(x) query. */ public long count(final EntityManager em, final String q, final P... params) { return (Long) query(em, q, params).getSingleResult(); }
/** Find multiple objects with optional pagination. */ public <A> List<A> findAll(final EntityManager em, final String q, final Option<Integer> offset, final Option<Integer> limit, final P... params) { final Query query = query(em, q, params); for (Integer x : offset) query.setFirstResult(x); for (Integer x : limit) query.setMaxResults(x); return (List<A>) query.getResultList(); }
/** * Run a SELECT query that should return a single result. * * @return some value if the query yields exactly one result, none otherwise */ public <A> Option<A> findSingle(final EntityManager em, final String q, final P... params) { try { return some((A) query(em, q, params).getSingleResult()); } catch (NoResultException e) { return none(); } catch (NonUniqueResultException e) { return none(); } }
/** Find multiple entities. */ public <A> List<A> findAll(EntityManager em, final String q, final P... params) { return (List<A>) query(em, q, params).getResultList(); }
/** Run an update (UPDATE or DELETE) query and ensure that at least one row got affected. */ public boolean update(EntityManager em, String q, P... params) { return query(em, q, params).executeUpdate() > 0; }
/** Run a SELECT query and return only the first result item. */ public <A> Option<A> findFirst(final EntityManager em, final String q, final P... params) { try { return some((A) query(em, q, params).setMaxResults(1).getSingleResult()); } catch (NoResultException e) { return none(); } catch (NonUniqueResultException e) { return none(); } }