Methode create apres une condition

Fermé
mozhar - 22 févr. 2014 à 21:50
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 - 23 févr. 2014 à 09:32
comment empecher la commande create dans le contoller d'executer la creation


List<Compte> l=em.createQuery
("SELECT e "+"FROM Solde e "+ "WHERE e.compte= :compte "+"AND e.mois= :mois")
.setParameter("compte", entity.getCompte())
.setParameter("mois", entity.getMois())
.getResultList();

if(l!=null && l.size()>0);

JsfUtil.addErrorMessage("Attention solde existe deja");

1 réponse

KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
22 févr. 2014 à 21:59
De quelle création tu parles ? Ici tu fais un select...
0
Je fait sélect pour s'assurer que la création soit unique chef
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
23 févr. 2014 à 00:13
Attention : tu as un mis un point virgule après ta condition
if(l!=null && l.size()>0); 
mais il faudrait que tu l'enlèves pour que le if fonctionne correctement.
0
oui chef mais j'ai mal posé la question voila,
quand je cherhe la liste et je la trouve pas vide alors je doit pas contunuer je doit bloquer l'utilisateur de continuer alors comment bloquer l'operation dans le cas la list "l" n'est pas vide ; tu vois le message d'erreur je veut un fontion qui stope le precerssus
merci
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
23 févr. 2014 à 09:32
Déjà si le but est de regarder si tu as zéro élément, je trouve inutile de récupérer une liste, récupérer un seul élément suffira à déterminer qu'il existe déjà.

Ensuite pour ton problème tu peux générer ta propre exception qui interrompra le processus, tout en pouvant être récupérée par l'utilisateur si besoin.

private EntityManager em;

/**
 * @param entity le compte à créer
 * @throws IllegalArgumentException si entity est null, ou si le compte existe déjà
 */
public void creerCompte(Compte entity) throws IllegalArgumentException
{
    if (entity==null)
        throw new IllegalArgumentException("Le compte à créer est null");

    Query query =  em.createQuery("SELECT e "+"FROM Solde e "+ "WHERE e.compte= :compte "+"AND e.mois= :mois");
    query.setParameter("compte", entity.getCompte()) 
    query.setParameter("mois", entity.getMois());
    
    try
    {
        Object obj = getSingleResult();
        throw new IllegalArgumentException("Le compte existe déjà : "+obj);
    }
    catch (NoResultException e)
    {
        // le compte n'existe pas, on va pouvoir le créer
    }
    catch (NonUniqueResultException e)
    {
        throw new IllegalArgumentException("Plusieurs comptes existent déjà");
    }
    catch (Exception e)
    {
         throw e; // erreur d'accès à la base de données
    }

    // si on arrive ici c'est que le compte n'existe pas, on peux le créer

    // ...

}
0