/** 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 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(); } }
@Override public Long apply(EntityManager em) { return count(em, q, params); } };
@Override public Boolean apply(EntityManager em) { return update(em, q, params); } };
/** Find multiple entities and wrap the in the list monad. */ public <A> Monadics.ListMonadic<A> findAllM(EntityManager em, final String q, final P... params) { return mlist(this.<A>findAll(em, q, params)); }
@Override public List<A> apply(EntityManager em) { return findAll(em, q, params); } };
/** 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 COUNT(x) query. */ public long count(final EntityManager em, final String q, final P... params) { return (Long) query(em, q, params).getSingleResult(); }
@Override public Option<A> apply(EntityManager em) { return findSingle(em, q, params); } };
/** 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 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(); } }
@Override public Option<A> apply(EntityManager em) { return findFirst(em, q, params); } };
/** Find multiple objects with pagination wrapped in the list monad. */ public <A> Monadics.ListMonadic<A> findAllM(final EntityManager em, final String q, final int offset, final int limit, final P... params) { return mlist(this.<A>findAll(em, q, offset, limit, params)); }
public <A> Function<EntityManager, List<A>> findAll(final String q, final int offset, final int limit, final P... params) { return new Function<EntityManager, List<A>>() { @Override public List<A> apply(EntityManager em) { return findAll(em, q, offset, limit, params); } }; }
/** Find multiple objects with optional pagination wrapped in the list monad. */ public <A> Monadics.ListMonadic<A> findAllM(final EntityManager em, final String q, final Option<Integer> offset, final Option<Integer> limit, final P... params) { return mlist(this.<A>findAll(em, q, offset, limit, params)); }
/** 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(); }