IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

Rendre une NamedQuery paramétrable


Sujet :

Hibernate Java

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 125
    Points : 98
    Points
    98
    Par défaut Rendre une NamedQuery paramétrable
    Bonjour,

    Je cherche une solution pour rendre le contenu d'une requête paramétrée paramétrable...

    en bref:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @NamedQuery(name="MonObj.req1", query="select obj.a, obj.b, obj.c from MONOBJ obj WHERE obj.id=:IDOBJ")
    Je dispose de beaucoup de requêtes devant faire un select sur obj.a, obj.b, obj.c de ma table MONOBJ.

    Il me semble qu'il n'est pas possible de faire quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    @NamedQuery(name="MonObj.req1", query="select "+MONOBJ.LISTE_SELECT"+ from MONOBJ obj WHERE obj.id=:IDOBJ")
    @NamedQuery(name="MonObj.req2", query="select "+MONOBJ.LISTE_SELECT"+ from MONOBJ obj WHERE obj.name=:NAME")
    car j'ai cru comprendre que les annotations ne pouvaient pas être liées à un code static (ou pas) car elles sont initialisées en premier? En tout cas cela ne fonctionne pas, mais c'est quelque chose du genre que je cherche à faire.

    L'intérêt dans mon cas est qu'il y a beaucoup de colonnes à récupérer, et dans pas mal de requêtes. De plus il arrive qu'on ajoute des colonnes, et cela force à modifier toutes les namedqueries...
    Pour des raisons de perfs, je ne peux pas faire un simple "FROM MON OBJ WHERE...".

    J'espère que ma question est claire.

    Avez-vous une solution svp?

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Tu ne pourras pas faire ça avec des NamedQuery mais rien ne t'empêche de passer tes requêtes par un fichier properties et d'injecter en paramètres tes colonnes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    mon_query_1=select {0} from maTable where laCe = :cle
    mon_query_2=select {0} from monAutreTable where laCle = :cle
    ...
    ensuite, l'affectation des paramètres se fait comme d'habitude via query.setParameter(leNom, laValeur)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 125
    Points : 98
    Points
    98
    Par défaut
    Passer par un fichier de config et non une NamedQuery est-il géré au niveau du cache hibernate?
    Je sais que l’intérêt d'une NamedQuery est qu'hibernate ne reconstruit pas la requête plusieurs fois, je ne sais pas si ça fonctionne correctement si on externalise les requêtes.

    Malgré tout cela peut m'intéresser... je pense pouvoir sacrifier une performance minime contre un peu de code propre.

    Merci

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par oni13 Voir le message
    Il me semble qu'il n'est pas possible de faire quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    @NamedQuery(name="MonObj.req1", query="select "+MONOBJ.LISTE_SELECT"+ from MONOBJ obj WHERE obj.id=:IDOBJ")
    @NamedQuery(name="MonObj.req2", query="select "+MONOBJ.LISTE_SELECT"+ from MONOBJ obj WHERE obj.name=:NAME")
    Si MONOBJ.LISTE_SELECT est statique final et calculable à la compilation, alors c'est bon. Ce qui importe c'est que le compilateur puisse connaitre les valeurs des propriétés des annotations pour les stocker dans le .class


    donc ceci est bon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    @NamedQuery(name="MonObj.req1", query="select "+MONOBJ.LISTE_SELECT"+ from MONOBJ obj WHERE obj.id=:IDOBJ")
     
    public class MONOBJ
       public static final String LISTE_SELECT=" obj.a, obj.b, obj.c";

    Ceci n'est pas bon


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    @NamedQuery(name="MonObj.req1", query="select "+MONOBJ.LISTE_SELECT"+ from MONOBJ obj WHERE obj.id=:IDOBJ")
     
    public class MONOBJ
       public static final String LISTE_SELECT=StaticProperties.get("obj.defaultParameterList");

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 125
    Points : 98
    Points
    98
    Par défaut
    En effet, cela fonctionne avec le mot clé final... je n'ai pas pensé à tester.

    Je ne pensais pas que ce mot avait un autre intérêt que de gagner des points sur les outils d'analyse de code
    Mais après coup, c'est vrai que ça semble logique que le compilateur ait besoin de savoir qu'il s'agit d'une valeur bloquée.

    Comme toujours, merci pour ces détails

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par oni13 Voir le message
    Je ne pensais pas que ce mot avait un autre intérêt que de gagner des points sur les outils d'analyse de code
    Ben non, ça sert principalement à empêcher qu'on modifie la valeur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MFC] rendre une boite de dialogue inactive
    Par Vestaproman dans le forum MFC
    Réponses: 8
    Dernier message: 22/01/2004, 14h09
  2. Rendre une disquette illisible par d'autres que moi
    Par kivoch dans le forum x86 16-bits
    Réponses: 8
    Dernier message: 26/12/2003, 22h49
  3. [TP]rendre une unité avec l'extension tpu
    Par mmm dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 28/10/2003, 20h09
  4. Rendre une page d'un TPageControl invisible
    Par DevelOpeR13 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 10/06/2003, 11h26
  5. Rendre une fenêtre modale non modale
    Par Smortex dans le forum Composants VCL
    Réponses: 2
    Dernier message: 30/03/2003, 17h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo