Voici une première méthode simple qui prend un type paramétrable :
Une plus complexe, qui déclare un type TDAO qui doit obligatoirement étendre l'inteface GenericDAO, qui elle même, prend 2 types génériques, un TBEAN et un type ? qui implemente Serialisable)
private <TDAO extends GenericDAO<TBEAN, ? extends Serializable>, TBEAN>  void supprimerRelation(
   final TDAO dao, final Collection<TBEAN> beans)
 Attention, les types sont réutilisés pour les paramètres de la méthode :
final 
private <TDAO extends GenericDAO<TBEAN, ? extends Serializable>, TBEAN> void supprimerRelation(final TDAO dao, final Collection<TBEAN> beans )
Voici le code complet :
/**
  * initialise puis supprime la collection de bean passés en paramètre
  * Attention, les types DAO et beans doivent correspondrent 
  * @param <TDAO> est le type de DAO
  * @param <TBEAN> est le type de bean 
  * @param dao est le DAO
  * @param beans est une Collecion de beans
  */
 private <TDAO extends GenericDAO<TBEAN, ? extends Serializable>, TBEAN> void supprimerRelation(
   final TDAO dao, final Collection<TBEAN> beans) {
  if (beans != null && dao !=  null) {   
   isInitialized(beans);
   for (TBEAN bean : beans) {
    supprimerRelation(dao,bean);
   }
  }
  else if(beans == null)
  {
   logger.debug("La collection passée en paramètre ne doit pas être null");
  }
  else{
   logger.debug("Le DAO passée en paramètre ne doit pas être null");
  }
 }
 
 /**
  * initialise puis supprime le bean passé en paramètre
  * Attention, les types DAO et bean doivent correspondrent 
  * @param <TDAO> est le type de DAO
  * @param <TBEAN> est le type de bean 
  * @param dao est un DAO
  * @param bean est le bean
  */
 private <TDAO extends GenericDAO<TBEAN, ? extends Serializable>, TBEAN> void supprimerRelation(
   final TDAO dao, final TBEAN bean) {
  if (bean != null && dao != null) {
   isInitialized(bean);
   dao.delete(bean);
  } else if (bean == null) {
   logger.debug("Le bean passé en paramètre ne doit pas être null");
  } else {
   logger.debug("Le DAO passé en paramètre ne doit pas être null");
  }
 }
 /**
  * initialise et retourne au sens hibernate un bean
  * @param <T> le type du bean
  * @param bean le bean a initialiser
  * @return le bean passé en paramètre (ne sert que pour pouvoir faire une affectation )
  */
 private <T> T isInitialized(T bean) {
  if (bean != null && !Hibernate.isInitialized(bean)) {
   Hibernate.initialize(bean);
  }
  return bean;
 }
Aucun commentaire:
Enregistrer un commentaire