Mise en variable de colonne dans une requete en jpa

Résolu
babacool951 -  
 babacool951 -
Bonjour,

je n'arrive pas à mettre en variable les colonnes en jpa dans le but de faire une fonction generique .

public Set<T> fingAllBySomething(Object o, Object o2) throws DaoException {
        try {
            TypedQuery<T> tp = this.em.createQuery("SELECT t FROM " + this.entityClass.getSimpleName() + " t WHERE :colonne = :valeur", this.entityClass);
            tp.setParameter("valeur", o2);
            tp.setParameter("colonne", "t." + o);
            return tp.getResultList().stream().collect(Collectors.toSet());
        } catch (IllegalArgumentException e) {
            throw new DaoException(e.getMessage(), e);
        }
    }

1 réponse

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Bonjour,

    Au lieu de faire un "WHERE :colonne" avec setParameter("colonne", "t." + o) tu peux simplement faire "WHERE t." + o

    Remarque : Le nom d'une colonne est forcément un String, pas besoin de mettre Object
    0
    1. babacool951
       
      Bonjour,

      Je vous remercie de votre réponse ça fonctionne parfaitement !!!

      J'avais oublié que les colonnes devaient être obligatoirement en String.
      1