/*_##########################################################################
_##
_## Copyright (C) 2012 Kaito Yamada
_##
_##########################################################################
*/
package com.github.kaitoy.sneo.giane.model.dao.impl;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
abstract class AbstractDao<T> implements EntityManagerInjectee {
private EntityManager entityManager;
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
protected EntityManager getEntityManager() {
return entityManager;
}
public CriteriaBuilder getCriteriaBuilder() {
return entityManager.getCriteriaBuilder();
}
public void create(T obj) throws Exception {
entityManager.persist(obj);
}
public void update(T obj) throws Exception {
entityManager.merge(obj);
}
public void update(List<T> objs) throws Exception {
for (T obj: objs) {
entityManager.merge(obj);
}
}
public void delete(T obj) throws Exception {
entityManager.remove(obj);
}
public void delete(List<T> objs) throws Exception {
for (T obj: objs) {
entityManager.remove(obj);
}
}
public List<T> findByCriteria(CriteriaQuery<T> cq) {
return entityManager.createQuery(cq).getResultList();
}
protected T findSingleBy(String propName, Object propValue, Class<T> modelClass) {
CriteriaBuilder cb = getCriteriaBuilder();
CriteriaQuery<T> cq = cb.createQuery(modelClass);
Root<T> r = cq.from(modelClass);
cq.select(r).where(cb.equal(r.get(propName), propValue));
try {
return getEntityManager().createQuery(cq).getSingleResult();
} catch (NoResultException e) {
return null;
}
}
protected List<T> list(Class<T> modelClass) {
CriteriaBuilder cb = getCriteriaBuilder();
CriteriaQuery<T> cq = cb.createQuery(modelClass);
cq.select(cq.from(modelClass));
return getEntityManager().createQuery(cq).getResultList();
}
}