Mise en variable de colonne dans une requete en jpa

Résolu/Fermé
babacool951 - Modifié le 23 févr. 2022 à 07:43
 babacool951 - 23 févr. 2022 à 11:29
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

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
23 févr. 2022 à 07:49
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
Bonjour,

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

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