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 :

Faire un trim dans un WHERE [Criteria]


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 419
    Par défaut Faire un trim dans un WHERE
    Bonjour,

    Je suis dans un cas assez spécial, avec des sources de données qui contiennent desidentifiants nommés différements.

    par exemple :
    iphone4s peut s'écrire :
    iphone4s
    i phone 4 s
    I Phone 4S
    I-Phone4S
    ...

    En SQL, j'aurais fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE TRIM(LOWER(matable.monmodel)) = TRIM(LOWER("test")
    mais en Hibernate, je suis un peu perdu...

    J'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Criteria criteria = session.createCriteria(Device.class, "d");
    criteria.add(Restrictions.eq("d.brand", brand));
    criteria.add(Restrictions.eq("lower(trim(d.modelName))", modelName.trim().toLowerCase().replace(" ", "").replace("-", "").replace("_", "")));
    Qu'en pensez vous ?
    Pierre

  2. #2
    Membre Expert
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 419
    Par défaut
    Bonjour.

    Je cherche toujours à résoudre cette question.

    Si quelqu'un a une idée, je suis preneur...

    En ce moment j'ai un système d'alias, mais je pense que ca multiplie le temps d’exécution de mon filtre d'import par 2 ou 3...(environ 30 minutes...)

    Merci

  3. #3
    Membre Expert
    Avatar de pmithrandir
    Homme Profil pro
    Responsable d'équipe développement
    Inscrit en
    Mai 2004
    Messages
    2 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable d'équipe développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 419
    Par défaut
    Bon, j'ai trouvé ceci :

    Code Ancien : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Criteria criteria = session.createCriteria(
    								Device.class, "d");
     
    						criteria.add(Restrictions.eq("d.brand", brand));
    						criteria.add(Restrictions.eq("d.modelName", modelName));
     
    						return criteria.list();

    Code Nouveau : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Query query = session.createQuery("" +
    								"FROM Device d " +
    								"WHERE d.brand = :brand " +
    								"AND REPLACE(REPLACE(REPLACE(lower(d.modelName), ' ', ''), '-', ''), '_', '') = REPLACE(REPLACE(REPLACE(lower(:modelName), ' ', ''), '-', ''), '_', '')");
    						query.setParameter("brand", brand);
    						query.setParameter("modelName", modelName);
    						return query.list();

    Sachant que j'ai aussi modifier la methode equals de l'objet Brand comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    		String firstBrand = getBrandName().toLowerCase().replace(" ", "").replace("_", "").replace("-", "");
    		String secondBrand = other.getBrandName().toLowerCase().replace(" ", "").replace("_", "").replace("-", "");
    puis un bete equals sur les string pour vérifier que les objet "brand" sont les mêmes

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

Discussions similaires

  1. Faire un IF dans un WHERE
    Par lodan dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/11/2009, 12h16
  2. Faire defiler Texte dans un label
    Par Techsan dans le forum Composants VCL
    Réponses: 5
    Dernier message: 08/06/2003, 23h29
  3. [XSL]faire une balise dans une balise??? (ComboBox)
    Par rastoix dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 23/05/2003, 08h34
  4. faire un selection dans une image aves les APIs
    Par merahyazid dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/04/2002, 10h44

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