Methode create apres une condition

mozhar -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
De quelle création tu parles ? Ici tu fais un select...
0
mozhar
 
Je fait sélect pour s'assurer que la création soit unique chef
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
mozhar
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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