All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.evasion.dao.api.AbstractJPAGenericDAO Maven / Gradle / Ivy

/*
 * Document confidentiel - Diffusion interdite 
 */
package com.evasion.dao.api;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.EntityManager;
import javax.persistence.Query;

/**
 * Implementation Hibernate du GenericDAO.
 * 
 * @param 
 *            le type persistent
 * @param 
 *            le type de la clef primaire de l'objet persistent
 */
public abstract class AbstractJPAGenericDAO
        implements GenericDAO {

    /** LOGGER */
    public static final Logger LOGGER = Logger.getLogger(AbstractJPAGenericDAO.class.getName());

    private EntityManager em;

    /** persistentClass */
    private final Class persistentClass;

    /**
     * Constructeur.
     * @param  namePU
     */
    @SuppressWarnings("unchecked")
    public AbstractJPAGenericDAO() {
        super();
        final ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass();
        this.persistentClass = (Class) type.getActualTypeArguments()[0];
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void clear() {
        LOGGER.log(Level.FINE, "Nettoyage (clear) de la session.");
        this.em.clear();
    }

    /**
     * {@inheritDoc}
     */
    @SuppressWarnings("unchecked")
    @Override
    public List findAll() {
        Query query = this.em.createQuery("SELECT e FROM " + this.persistentClass.getSimpleName() + " e");
        final List result = (List) query.getResultList();
        LOGGER.log(Level.FINE,
                "La recherche de toute les entités de type {} a retourné {} résultats",
                 new Object[]{this.persistentClass, result.size()});
        return result;
    }

    /**
     * {@inheritDoc}
     */
    @SuppressWarnings("unchecked")
    public T findById(final PK id) {
        final T result = (T) this.em.find(this.persistentClass,
                id);
        LOGGER.log(Level.FINE,
                "La recherche de l'entite de type {} avec l'id {} a retourn� {}",
                new Object[]{this.persistentClass, id, result});
        return result;
    }

    /**
     * {@inheritDoc}
     */
    public void flush() {
        LOGGER.log(Level.FINE, "Synchronisation (flush) de la session counrante.");
        this.em.flush();
    }

    /**
     * {@inheritDoc}
     */
    @SuppressWarnings("unchecked")
    public T getReference(final PK id) {
        LOGGER.log(Level.FINE,
                "R�cup�ration d'une r�f�rence � l'entite de type {} avec l'id {}",
                new Object[]{this.persistentClass, id});
        return (T) this.em.getReference(persistentClass, id);
    }

    /**
     * {@inheritDoc}
     */
    @SuppressWarnings("unchecked")
    public T merge(final T entity) {
        LOGGER.log(Level.FINE,"Merging entity {}", new Object[]{entity});
        return (T) em.merge(entity);
    }

    /**
     * {@inheritDoc}
     */
    public void persist(final T entity) {
        LOGGER.log(Level.FINE,"Persisting entity {}", entity);
        this.em.persist(entity);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void remove(T entity) {
        LOGGER.log(Level.FINE,"Suppression de l'entite {}", entity);
        this.em.remove(entity);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public EntityManager getEntityManager() {
        return em;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void setEntityManager(EntityManager em) {
        this.em = em;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy