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 :

Problème de construction d'une requete criteria


Sujet :

Hibernate Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 614
    Points : 714
    Points
    714
    Par défaut Problème de construction d'une requete criteria
    Bonjour,

    Voici mon problème :
    J'utilise Hibernate pour la persistance de mes données. et j'utilise les criteria pour faire une recherche. Voici les objets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class Personne {
     
    private String id; // clef
    private string nom;
    private Telephone telephone;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class Telephone {
     
    private String numero; // clef
    private String type;
    }
    La table personne a donc un truc du style :
    id | nom | telephone
    où le champs téléphone contient la clef vers la table telephone.

    Le truc (c'est pas moi qui ai fait les données...), c'est que lorsque aucun telephone n'est associé à une personne, celle-ci a un champs égal à "0000000000", qui n'a pas d'entrée dans la table téléphone.

    Je souhaite obtenir toutes les personnes qui ont pour nom "martin" et pas de téléphone. Et c'est là que ça bloque... Je n'arrive pas à construire la restriction vers le téléphone dans ces conditions. Restriction.isNull passe pas, et évidemment, je peux pas jouer (à moins que je me trompe) sur le champs égal à "000000000"...

    Quelqu'un a une idée ?

    Merci par avance.

  2. #2
    mow
    mow est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 210
    Points : 166
    Points
    166
    Par défaut
    Salut,

    Rajoute un attribut id au niveau de ton objet Telephone et je pense que ta condition : Restriction.isNull passera...
    M'enfin...je suis pas sûr mais essaye ça....

    Autre chose, peut être qu'il y a un moyen de préciser à Hibernate que l'attribut telephone de l'objet Personne peut être null... Et cela débloquera ta situation...

    Tiens nous au courant cela pourra nous aider un jour...

    Mow

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 614
    Points : 714
    Points
    714
    Par défaut
    Merci pour l'intervention

    Citation Envoyé par mow Voir le message
    Salut,

    Rajoute un attribut id au niveau de ton objet Telephone et je pense que ta condition : Restriction.isNull passera...
    M'enfin...je suis pas sûr mais essaye ça....
    Non, ça c'est déjà fait : le champs numero est déjà déclaré comme clef. Et NotNull passe pas.

    En fait j'ai jeté un zyeux dans les sources Hibernate, et à prioris, par un Criteria, notNull=true si le champs de la base est Null. Or dans mon cas c'est pas le cas (on a un numero ou 0000000000). Du coup, je me demande si ça bloque pas l'autre proposition :

    Autre chose, peut être qu'il y a un moyen de préciser à Hibernate que l'attribut telephone de l'objet Personne peut être null... Et cela débloquera ta situation...
    C'est vrai que dans le mapping, not-null est pas spécifié... Je vais voir en jouant là dessus... (hihi)

    Tiens nous au courant cela pourra nous aider un jour...
    No problème. Enfin... J'admet que la bétise de cette gestion est que le champs telephone de Personne est une cléf étrangère, mais qu'elle n'est pas déclaré comme tel dans la base (merci nos DBA ) et que pour le mapping d'Hibernate elle est notée comme tel. Du coup, avec un peu de forcing, chez moi ça se résoudera par une modif au niveau de la BD en déclarant ce champs correctement

    Sinon, une autre solution à laquelle je pensais... Y a t il moyen de faire un criterion à partir de SQL natif ? Chui p'têt bourré, mais j'ai pas retrouvé dans la doc Hibernate...

    P.S. désolé au fait, j'avais pas fait attention lors de l'ouverture de ce message qu'il y avait une sous-catégorie Hibernate... Evidemment, j'ai pas moyen de déplacer mon message...

  4. #4
    mow
    mow est déconnecté
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 210
    Points : 166
    Points
    166
    Par défaut
    Désolé je me suis mal exprimé mais vu mon précédent message ce à quoi je pensais ne marchera pas malgré tout...
    Au niveau de l'objet Personne je te demandais de rajouter un clé de type int mais pas string et c'est là je pense qu'il interprétera mieux isNull...


    Mow

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    614
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 614
    Points : 714
    Points
    714
    Par défaut
    Citation Envoyé par mow Voir le message
    Désolé je me suis mal exprimé mais vu mon précédent message ce à quoi je pensais ne marchera pas malgré tout...
    Au niveau de l'objet Personne je te demandais de rajouter un clé de type int mais pas string et c'est là je pense qu'il interprétera mieux isNull...
    Oui mais je crois pas que ca marchera : quand on regarde les source d'hibernate, isNull entraine lors de l'appel toSqlString :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) 
    	throws HibernateException {
    		String[] columns = criteriaQuery.getColumnsUsingProjection(criteria, propertyName);
    		String result = StringHelper.join(
    			" and ",
    			StringHelper.suffix( columns, " is null" )
    		);
    		if (columns.length>1) result = '(' + result + ')';
    		return result;
     
    		//TODO: get SQL rendering out of this package!
    	}
    En gros, la requete produite par le isNull doit être du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from Personne where nom="martin" and Telephone is null
    et ça, ça me va pas...

Discussions similaires

  1. Problème d'éxecution d'une requete
    Par TheKratos dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 24/08/2006, 22h39
  2. [débutant] problème de condition dans une requete
    Par banker dans le forum Access
    Réponses: 5
    Dernier message: 22/03/2006, 14h52
  3. [VBA-E]problème de date dans une requete
    Par isa21493 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 24/02/2006, 12h45
  4. FAQ : problème avec création d'une requete en VBA
    Par Oluha dans le forum VBA Access
    Réponses: 14
    Dernier message: 14/02/2006, 13h05
  5. Problème de construction d'une classe
    Par AraBorLeg dans le forum Langage
    Réponses: 2
    Dernier message: 05/12/2005, 20h07

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