package org.raidenjpa.util;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
public class QueryHelper {
private Query query;
public QueryHelper(String jpql) {
EntityManager em = EntityManagerUtil.em();
query = em.createQuery(jpql);
}
public QueryHelper(StringBuilder jpql) {
this(jpql.toString());
}
public static QueryHelper create(Class<?> clazz, String attribute, Object value) {
String jpql = "SELECT x FROM " + clazz.getSimpleName() + " x WHERE x." + attribute + " = :parameter";
QueryHelper query = new QueryHelper(jpql);
query.parameter("parameter", value);
return query;
}
public void parameter(String parameter, Object value) {
query.setParameter(parameter, value);
}
public List<?> getResultList() {
return query.getResultList();
}
public QueryHelper setMaxResult(int maxResult) {
query.setMaxResults(maxResult);
return this;
}
public QueryHelper setFirstResult(int startPosition) {
query.setFirstResult(startPosition);
return this;
}
public Object getSingleResult() {
return query.getSingleResult();
}
@SuppressWarnings("unchecked")
public static <T> T singleResult(Class<T> clazz, String attribute,
String value) {
QueryHelper query = create(clazz, attribute, value);
return (T) query.getSingleResult();
}
}