com.evasion.dao.api.GenericDAO Maven / Gradle / Ivy
/*
* Document confidentiel - Diffusion interdite
*/
package com.evasion.dao.api;
import java.io.Serializable;
import java.util.List;
/**
* DAO generique.
*
* @param
* le type persistent
* @param
* le type de la clef primaire de l'objet persistent
*/
public interface GenericDAO extends DAO {
/**
* Charge l'objet ayant pour identifiant l'id passe en parametre. Cette
* methode lance une exception si l'objet n'a pas ete trouve.
*
* Note : Cette methode renvoie generalement un proxy et non l'objet charge
* depuis le repository (i.e. la base de donnees) Cela a plusieurs avantages
* en terme de performances :
*
* - L'entite n'est chargee de la base que lorsque l'on en a besoin
* - Le cache de second niveau est toujours utilise
*
* Mais a aussi un inconvenient :
*
* - Si l'entite n'existe pas dans le repository, une exception est lancee
* mais uniquement lors de l'acces a l'entite (lors de son chargement depuis
* le repository) et non lors de l'appel a load(). Les erreurs sont donc
* plus difficile a tracer.
*
* Cette methode est donc a utiliser lorsque l'on est sur que l'objet existe
* en base.
*
* @param id
* identifiant de l'objet
* @return l'objet correspondant a l'id passe en parametre
*/
T getReference(PK id);
/**
* Renvoie l'objet pour l'identifiant passe en parametre, ou
* null
si l'oblet n'a pas ete trouve.
*
* @param id
* identifiant de l'objet
* @return l'objet pour l'identifiant passe en parametre, ou
* null
si l'oblet n'a pas ete trouve.
*/
T findById(PK id);
/**
* Retourne tous les objets persistants correspondant à la classe de
* l'entite.
*
* @return la liste des entites ou une liste vide si aucune entite n'est
* trouvee.
*/
List findAll();
/**
* Attache l'entite a la session (ou l'entityManager). L'entite passee en
* parametre est manage par la Session (ou l'EntityManager).
*
* @param entity
* l'entite a persister
*/
void persist(T entity);
/**
* Save ou update l'entite pass�e en parametre.
*
* Note: l'entite passee en parametre n'est pas attachee a la session en
* cours (i.e. les modification sur l'objet ne seront pas persite en base).
* L'objet retourne par la methode est attache a la session.
*
* @param entity
* l'entite a sauvegarder
* @return l'entite persistante (i.e. attache a la session)
*/
T merge(T entity);
/**
* Supprime l'entite.
*
* @param entity
* l'entite a supprimer.
*/
void remove(T entity);
/**
* Synchronise la session (ou l'EntityManager) avec la base de donnee.
*
* Note : Cette methode n'est a utiliser que dans des cas specifiques
* (batch, TU, ...). Il est generalement preferable de laisser le framework
* gerer le flush lui-meme.
*/
void flush();
/**
* Vide la session (ou l'EntityManager). Tous les changements qui n'ont pas
* ete persistes sont perdus. Les entites sont toutes detachees de la
* session (donc ne sont plus gerees automatiquement par la session).
*
*/
void clear();
}