
net.sf.esfinge.querybuilder.jpa1.JPARepository Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of querybuilder-jpa1 Show documentation
Show all versions of querybuilder-jpa1 Show documentation
The Esfinge QueryBuilder JPA1 is the persistence framework for Esfinge QueryBuilder using JPA1.
The newest version!
package net.sf.esfinge.querybuilder.jpa1;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import net.sf.esfinge.querybuilder.Repository;
import net.sf.esfinge.querybuilder.exception.InvalidPropertyException;
import net.sf.esfinge.querybuilder.utils.ServiceLocator;
public class JPARepository implements Repository{
protected EntityManager em;
protected Class clazz;
public JPARepository(){
EntityManagerProvider emp = ServiceLocator.getServiceImplementation(EntityManagerProvider.class);
em = emp.getEntityManager();
}
@Override
public E save(E obj) {
E saved = em.merge(obj);
return saved;
}
@Override
public void delete(Object id) {
E e = em.find(clazz, id);
em.remove(e);
}
@Override
public List list() {
Query q = em.createQuery("select o from " + clazz.getSimpleName()+ " o");
return q.getResultList();
}
@Override
public E getById(Object id) {
return em.find(clazz, id);
}
@Override
public void configureClass(Class clazz) {
this.clazz = clazz;
}
@Override
public List queryByExample(E obj) {
Class> clazz = obj.getClass();
StringBuilder query = new StringBuilder("select o from "
+ clazz.getSimpleName() + " o where ");
Map params = new HashMap();
boolean first = true;
try {
for (Method m : clazz.getMethods()) {
if (!m.getName().equals("getClass")
&& JPADAOUtils.isGetterWhichIsNotTransient(m, clazz)) {
Object value = m.invoke(obj);
if (value != null && !value.toString().trim().equals("")) {
String prop = m.getName().substring(3, 4).toLowerCase()
+ m.getName().substring(4);
params.put(prop, value);
if (first) {
first = false;
} else {
query.append(" and");
}
query.append(" o." + prop + "= :" + prop);
}
}
}
} catch (Exception e) {
throw new InvalidPropertyException("Error building query", e);
}
Query q = em.createQuery(query.toString().toString());
for (String prop : params.keySet()) {
q.setParameter(prop, params.get(prop));
}
return q.getResultList();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy