/*
* Copyright (C) 2014 GG-Net GmbH - Oliver Günther
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package eu.ggnet.dwoss.util.persistence.eao;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.LockModeType;
/**
* An abstract Entity Access Object for the default actions.
* T class of the Entity
*/
public abstract class AbstractEao<T> {
private Class<T> entityClass;
public AbstractEao(Class<T> entityClass) {
this.entityClass = entityClass;
}
public abstract EntityManager getEntityManager();
public T findById(Object id) {
if ( id == null ) return null;
return getEntityManager().find(entityClass, id);
}
public T findById(Object id, LockModeType lockModeType) {
if ( id == null ) return null;
return getEntityManager().find(entityClass, id, lockModeType);
}
public List<T> findAll() {
javax.persistence.criteria.CriteriaQuery<T> cq = getEntityManager().getCriteriaBuilder().createQuery(entityClass);
cq.select(cq.from(entityClass));
return getEntityManager().createQuery(cq).getResultList();
}
public List<T> findAll(int start, int amount) {
javax.persistence.criteria.CriteriaQuery<T> cq = getEntityManager().getCriteriaBuilder().createQuery(entityClass);
cq.select(cq.from(entityClass));
return getEntityManager().createQuery(cq).setFirstResult(start).setMaxResults(amount).getResultList();
}
public int count() {
javax.persistence.criteria.CriteriaQuery<Long> cq = getEntityManager().getCriteriaBuilder().createQuery(Long.class);
javax.persistence.criteria.Root<T> rt = cq.from(entityClass);
cq.select(getEntityManager().getCriteriaBuilder().count(rt));
javax.persistence.TypedQuery<Long> q = getEntityManager().createQuery(cq);
return q.getSingleResult().intValue();
}
}