EventChildGenericFacade.java 1.43 KB
package fi.insomnia.bortal.facade;

import javax.persistence.TypedQuery;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import fi.insomnia.bortal.model.Event;
import fi.insomnia.bortal.model.EventChildInterface;
import fi.insomnia.bortal.model.EventPk;

/**
 * Session Bean implementation class GenericFacade
 */
public abstract class EventChildGenericFacade<T extends EventChildInterface> extends GenericFacade<EventPk, T> {

    public EventChildGenericFacade(Class<T> entityClass) {
        super(entityClass);

    }

    private static final Logger logger = LoggerFactory.getLogger(EventChildGenericFacade.class);

    public T find(Integer eventId, Integer id) {

        EventPk pk = new EventPk(eventId);
        pk.setId(id);

        logger.debug("Fetching object {} with key {}", this.getEntityClass(), pk);
        return find(pk);
    }

    public long count(Event e) {
        CriteriaBuilder builder = getEm().getCriteriaBuilder();
        CriteriaQuery<Long> query = builder.createQuery(Long.class);

        Root<T> entity = query.from(getEntityClass());

        query.where(builder.equal(entity.get("id").get("eventId"), e.getId())).select(getEm().getCriteriaBuilder().count(entity));

        TypedQuery<Long> q = getEm().createQuery(query);
        return q.getSingleResult();
    }
}