Methode create apres une condition

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

  1. Modérateur
    De quelle création tu parles ? Ici tu fais un select...
    1. Je fait sélect pour s'assurer que la création soit unique chef
    2. Modérateur
      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.
    3. 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
    4. Modérateur
      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
      
          // ...
      
      }